15f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian/*
25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2009 Apple Inc. All rights reserved.
35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2009 Google Inc. All rights reserved.
45f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
55f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Redistribution and use in source and binary forms, with or without
65f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * modification, are permitted provided that the following conditions
75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * are met:
85f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
95f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 1.  Redistributions of source code must retain the above copyright
105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *     notice, this list of conditions and the following disclaimer.
115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 2.  Redistributions in binary form must reproduce the above copyright
125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *     notice, this list of conditions and the following disclaimer in the
135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *     documentation and/or other materials provided with the distribution.
145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *     its contributors may be used to endorse or promote products derived
165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *     from this software without specific prior written permission.
175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian */
295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#ifndef InspectorFrontend_h
315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#define InspectorFrontend_h
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ScriptArray.h"
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ScriptObject.h"
355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "ScriptState.h"
365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <wtf/PassOwnPtr.h>
375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
385e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace JSC {
405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class JSValue;
415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class SourceCode;
425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class UString;
435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif
455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace WebCore {
475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class ConsoleMessage;
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class Database;
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class Frame;
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class InspectorController;
515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class InspectorResource;
525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class Node;
535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    class ScriptString;
548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    class SerializedScriptValue;
55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class Storage;
565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
57d0825bca7fe65beaee391d30da42e937db621564Steve Block    class InspectorFrontend : public Noncopyable {
585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    public:
598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        InspectorFrontend(InspectorController* inspectorController, ScriptObject webInspector);
605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        ~InspectorFrontend();
615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ScriptArray newScriptArray();
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ScriptObject newScriptObject();
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didCommitLoad();
66d0825bca7fe65beaee391d30da42e937db621564Steve Block
67d0825bca7fe65beaee391d30da42e937db621564Steve Block        void populateFrontendSettings(const String& settings);
68d0825bca7fe65beaee391d30da42e937db621564Steve Block
69d0825bca7fe65beaee391d30da42e937db621564Steve Block        void updateConsoleMessageExpiredCount(unsigned count);
70d0825bca7fe65beaee391d30da42e937db621564Steve Block        void addConsoleMessage(const ScriptObject& messageObj, const Vector<ScriptString>& frames, ScriptState*, const Vector<ScriptValue> arguments, const String& message);
71d0825bca7fe65beaee391d30da42e937db621564Steve Block        void updateConsoleMessageRepeatCount(unsigned count);
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void clearConsoleMessages();
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        bool updateResource(unsigned long identifier, const ScriptObject& resourceObj);
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void removeResource(unsigned long identifier);
76d0825bca7fe65beaee391d30da42e937db621564Steve Block        void didGetResourceContent(int callId, const String& content);
775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void updateFocusedNode(long nodeId);
795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void setAttachedWindow(bool attached);
805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void showPanel(int panel);
815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void populateInterface();
825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void reset();
835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void resourceTrackingWasEnabled();
855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void resourceTrackingWasDisabled();
865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
875e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void attachDebuggerWhenShown();
895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void debuggerWasEnabled();
905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void debuggerWasDisabled();
915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void parsedScriptSource(const JSC::SourceCode&);
925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void failedToParseScriptSource(const JSC::SourceCode&, int errorLine, const JSC::UString& errorMessage);
938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        void pausedScript(SerializedScriptValue* callFrames);
948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        void resumedScript();
958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#endif
968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#if ENABLE(JAVASCRIPT_DEBUGGER)
978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        void profilerWasEnabled();
988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        void profilerWasDisabled();
99cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void addProfileHeader(const ScriptValue& profile);
1005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void setRecordingProfile(bool isProfiling);
101cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void didGetProfileHeaders(int callId, const ScriptArray& headers);
102cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void didGetProfile(int callId, const ScriptValue& profile);
1035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif
1045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(DATABASE)
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        bool addDatabase(const ScriptObject& dbObj);
107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void selectDatabase(int databaseId);
108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didGetDatabaseTableNames(int callId, const ScriptArray& tableNames);
1095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif
1105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(DOM_STORAGE)
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        bool addDOMStorage(const ScriptObject& domStorageObj);
113231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void selectDOMStorage(int storageId);
114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didGetDOMStorageEntries(int callId, const ScriptArray& entries);
115231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didSetDOMStorageItem(int callId, bool success);
116231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didRemoveDOMStorageItem(int callId, bool success);
117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void updateDOMStorage(int storageId);
1185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif
1195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void setDocument(const ScriptObject& root);
121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void setDetachedRoot(const ScriptObject& root);
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void setChildNodes(int parentId, const ScriptArray& nodes);
123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void childNodeCountUpdated(int id, int newValue);
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void childNodeInserted(int parentId, int prevId, const ScriptObject& node);
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void childNodeRemoved(int parentId, int id);
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void attributesUpdated(int id, const ScriptArray& attributes);
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void didGetChildNodes(int callId);
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        void didApplyDomChange(int callId, bool success);
129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didGetEventListenersForNode(int callId, int nodeId, ScriptArray& listenersArray);
130cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void didRemoveNode(int callId, int nodeId);
131231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
132cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void timelineProfilerWasStarted();
133cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void timelineProfilerWasStopped();
134cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        void addRecordToTimeline(const ScriptObject&);
135231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
136231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void didGetCookies(int callId, const ScriptArray& cookies, const String& cookiesString);
1378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        void didDispatchOnInjectedScript(int callId, SerializedScriptValue* result, bool isException);
138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void addNodesToSearchResult(const String& nodeIds);
140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void contextMenuItemSelected(int itemId);
142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        void contextMenuCleared();
143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        ScriptState* scriptState() const { return m_webInspector.scriptState(); }
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void evaluateForTestInFrontend(int callId, const String& script);
1475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    private:
1485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        void callSimpleFunction(const String& functionName);
149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        InspectorController* m_inspectorController;
1505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        ScriptObject m_webInspector;
1515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    };
1525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} // namespace WebCore
1545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif // !defined(InspectorFrontend_h)
156