diff options
author | ojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-07 20:47:13 +0000 |
---|---|---|
committer | ojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-07 20:47:13 +0000 |
commit | 38b62835d5e389f17b1071377eabd531085c5a1a (patch) | |
tree | 789b9fb91a947d6c49850b6e2370ee1981015c1c /webkit/pending | |
parent | 5530f662a27674b5f705dbaaf809ca685c31a226 (diff) | |
download | chromium_src-38b62835d5e389f17b1071377eabd531085c5a1a.zip chromium_src-38b62835d5e389f17b1071377eabd531085c5a1a.tar.gz chromium_src-38b62835d5e389f17b1071377eabd531085c5a1a.tar.bz2 |
Merge in InspectorController changes. Get rid of all the
crazy ifdef'ing in port/.../InspectorController.cpp.
Change jsc build back to useing the InspectorController
in third_party/WebKit.
Review URL: http://codereview.chromium.org/6519
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2961 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/pending')
-rw-r--r-- | webkit/pending/InspectorController.h | 364 |
1 files changed, 63 insertions, 301 deletions
diff --git a/webkit/pending/InspectorController.h b/webkit/pending/InspectorController.h index eb83ba6..2ec61b7 100644 --- a/webkit/pending/InspectorController.h +++ b/webkit/pending/InspectorController.h @@ -29,19 +29,9 @@ #ifndef InspectorController_h #define InspectorController_h -#if USE(V8) -// NOTE: The revision of the inspector JS and C++ that we are merged to -// is stored in trunk/webkit/port/page/inspector/BASE_REVISION. - -// TODO(ojan): When we merge to webkit trunk, get rid of the need for this. -// This part of this file contains the version of InspectorController.h that -// we are synced to in trunk WebKit along with our (extensive) changes for V8. -// The block below for #elif USE(JAVSCRIPTCORE_BINDINGS) has the old version -// of InspectorController.h from the 3.1 branch, which we need to keep for the -// KJS build. We unfortunately can't just use a different header file for -// each build because a bunch of different files pull in this header file. - +#if USE(JSC) #include "JavaScriptDebugListener.h" +#endif #include "Console.h" #include "PlatformString.h" @@ -121,23 +111,41 @@ public: void hideHighlight(); void show(); - void showConsole(); - void showTimeline(); + void showPanel(SpecialPanels); void close(); +#if USE(JSC) + bool isRecordingUserInitiatedProfile() const { return m_recordingUserInitiatedProfile; } + void startUserInitiatedProfiling(); + void stopUserInitiatedProfiling(); +#endif + bool windowVisible(); - void setWindowVisible(bool visible = true); + void setWindowVisible(bool visible = true, bool attached = false); #if USE(JSC) - void addMessageToConsole(MessageSource, MessageLevel, KJS::ExecState*, const KJS::List& arguments, unsigned lineNumber, const String& sourceID); + void addMessageToConsole(MessageSource, MessageLevel, KJS::ExecState*, const KJS::ArgList& arguments, unsigned lineNumber, const String& sourceID); #elif USE(V8) // TODO(ojan): Do we need to implement this version? #endif void addMessageToConsole(MessageSource, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID); + void clearConsoleMessages(); + void toggleRecordButton(bool); + +#if USE(JSC) + void addProfile(PassRefPtr<KJS::Profile>, unsigned lineNumber, const KJS::UString& sourceURL); + void addProfileMessageToConsole(PassRefPtr<KJS::Profile> prpProfile, unsigned lineNumber, const KJS::UString& sourceURL); + void addScriptProfile(KJS::Profile* profile); + const Vector<RefPtr<KJS::Profile> >& profiles() const { return m_profiles; } +#endif + void attachWindow(); void detachWindow(); + void setAttachedWindow(bool); + void setAttachedWindowHeight(unsigned height); + #if USE(JSC) JSContextRef scriptContext() const { return m_scriptContext; }; void setScriptContext(JSContextRef context) { m_scriptContext = context; }; @@ -177,13 +185,41 @@ public: const ResourcesMap& resources() const { return m_resources; } void moveWindowBy(float x, float y) const; + void closeWindow(); void startDebuggingAndReloadInspectedPage(); void stopDebugging(); + +#if USE(JSC) bool debuggerAttached() const { return m_debuggerAttached; } + JavaScriptCallFrame* currentCallFrame() const; + + void addBreakpoint(int sourceID, unsigned lineNumber); + void removeBreakpoint(int sourceID, unsigned lineNumber); + + bool pauseOnExceptions(); + void setPauseOnExceptions(bool pause); + + void pauseInDebugger(); + void resumeDebugger(); + + void stepOverStatementInDebugger(); + void stepIntoStatementInDebugger(); + void stepOutOfFunctionInDebugger(); +#endif + void drawNodeHighlight(GraphicsContext&) const; +#if USE(JSC) + void count(const KJS::UString& title, unsigned lineNumber, const String& sourceID); + + void startTiming(const KJS::UString& title); + bool stopTiming(const KJS::UString& title, double& elapsed); + + void startGroup(MessageSource source, KJS::ExecState* exec, const KJS::ArgList& arguments, unsigned lineNumber, const String& sourceURL); + void endGroup(MessageSource source, unsigned lineNumber, const String& sourceURL); +#endif #if USE(V8) // InspectorController.idl @@ -223,6 +259,7 @@ private: #endif void updateScriptResourceRequest(InspectorResource*); void updateScriptResourceResponse(InspectorResource*); + void updateScriptResourceType(InspectorResource*); void updateScriptResource(InspectorResource*, int length); void updateScriptResource(InspectorResource*, bool finished, bool failed = false); void updateScriptResource(InspectorResource*, double startTime, double responseReceivedTime, double endTime); @@ -258,20 +295,17 @@ private: #if USE(JSC) JSValueRef callSimpleFunction(JSContextRef, JSObjectRef thisObject, const char* functionName) const; - JSValueRef callFunction(JSContextRef, JSObjectRef thisObject, const char* functionName, size_t argumentCount, const JSValueRef arguments[], JSValueRef& exception) const; - bool handleException(JSContextRef, JSValueRef exception, unsigned lineNumber) const; + JSValueRef callFunction(JSContextRef, JSObjectRef thisObject, const char* functionName, size_t argumentCount, const JSValueRef arguments[], JSValueRef& exception) const; + + bool handleException(JSContextRef, JSValueRef exception, unsigned lineNumber) const; #endif void showWindow(); - void closeWindow(); #if USE(JSC) - virtual void didParseSource(KJS::ExecState*, const KJS::UString& source, int startingLineNumber, const KJS::UString& sourceURL, int sourceID); - virtual void failedToParseSource(KJS::ExecState*, const KJS::UString& source, int startingLineNumber, const KJS::UString& sourceURL, int errorLine, const KJS::UString& errorMessage); - virtual void didEnterCallFrame(KJS::ExecState*, int sourceID, int lineNumber); - virtual void willExecuteStatement(KJS::ExecState*, int sourceID, int lineNumber); - virtual void willLeaveCallFrame(KJS::ExecState*, int sourceID, int lineNumber); - virtual void exceptionWasRaised(KJS::ExecState*, int sourceID, int lineNumber); + virtual void didParseSource(KJS::ExecState*, const KJS::SourceProvider& source, int startingLineNumber, const KJS::UString& sourceURL, int sourceID); + virtual void failedToParseSource(KJS::ExecState*, const KJS::SourceProvider& source, int startingLineNumber, const KJS::UString& sourceURL, int errorLine, const KJS::UString& errorMessage); + virtual void didPause(); #elif USE(V8) // TODO(ojan): implement when we start integrating in the debugger. #endif @@ -282,283 +316,14 @@ private: RefPtr<Node> m_nodeToFocus; RefPtr<InspectorResource> m_mainResource; ResourcesMap m_resources; + HashSet<String> m_knownResources; FrameResourcesMap m_frameResources; Vector<ConsoleMessage*> m_consoleMessages; -#if ENABLE(DATABASE) - DatabaseResourcesSet m_databaseResources; -#endif -#if USE(JSC) - JSObjectRef m_scriptObject; - JSObjectRef m_controllerScriptObject; - JSContextRef m_scriptContext; -#elif USE(V8) - v8::Persistent<v8::Object> m_scriptObject; -#endif - bool m_windowVisible; - bool m_debuggerAttached; - SpecialPanels m_showAfterVisible; - unsigned long m_nextIdentifier; - RefPtr<Node> m_highlightedNode; -}; - -} // namespace WebCore - -#elif USE(JSC) -// TODO(ojan): When we merge to webkit trunk, get rid of all the code below. -// This part of this file contains the version of InspectorController.h that -// we are synced to in the 3.1 branch, which we need to keep for the -// KJS build. We unfortunately can't just use a different header file for -// each build because a bunch of different files pull in this header file. - -#include "Chrome.h" -#include <wtf/RefCounted.h> -#if USE(JSC) -#include <JavaScriptCore/JSContextRef.h> -#elif USE(V8) -#include <v8.h> -#endif -#include <wtf/HashMap.h> -#include <wtf/HashSet.h> -#include <wtf/Vector.h> - - -namespace WebCore { - -class Database; -class DocumentLoader; -class GraphicsContext; -class DOMWindow; -class InspectorClient; -class Node; -class ResourceResponse; -class ResourceError; - -struct ConsoleMessage; -struct InspectorDatabaseResource; -struct InspectorResource; -class ResourceRequest; - -class InspectorController : public RefCounted<InspectorController> { -public: - - typedef HashMap<unsigned long, RefPtr<InspectorResource> > ResourcesMap; - typedef HashMap<RefPtr<Frame>, ResourcesMap*> FrameResourcesMap; - typedef HashSet<RefPtr<InspectorDatabaseResource> > DatabaseResourcesSet; - - typedef enum { - CurrentPanel, - ConsolePanel, - DatabasesPanel, - ElementsPanel, - ProfilesPanel, - ResourcesPanel, - ScriptsPanel - } SpecialPanels; - - InspectorController(Page*, InspectorClient*); - ~InspectorController(); - - void inspectedPageDestroyed(); - void pageDestroyed() { m_page = 0; } - void inspectedPageDestroyed(); - - bool enabled() const; - - Page* inspectedPage() const { return m_inspectedPage; } - - String localizedStringsURL(); - - void inspect(Node*); - void highlight(Node*); - void hideHighlight(); - - void show(); - void showPanel(SpecialPanels); - void close(); - - bool isRecordingUserInitiatedProfile() const { return m_recordingUserInitiatedProfile; } - void startUserInitiatedProfiling(); - void stopUserInitiatedProfiling(); - void finishedProfiling(PassRefPtr<KJS::Profile>); - - bool windowVisible(); - void setWindowVisible(bool visible = true, bool attached = false); - - void addMessageToConsole(MessageSource, MessageLevel, KJS::ExecState*, const KJS::ArgList& arguments, unsigned lineNumber, const String& sourceID); - void addMessageToConsole(MessageSource, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID); - void clearConsoleMessages(); - void toggleRecordButton(bool); - - void addProfile(PassRefPtr<KJS::Profile>, int lineNumber, const KJS::UString& sourceURL); - void addProfileMessageToConsole(PassRefPtr<KJS::Profile> prpProfile, int lineNumber, const KJS::UString& sourceURL); - void addScriptProfile(KJS::Profile* profile); - const Vector<RefPtr<KJS::Profile> >& profiles() const { return m_profiles; } - - void attachWindow(); - void detachWindow(); - - void setAttachedWindow(bool); - void setAttachedWindowHeight(unsigned height); - #if USE(JSC) - JSContextRef scriptContext() const { return m_scriptContext; }; - void setScriptContext(JSContextRef context) { m_scriptContext = context; }; -#endif - - void inspectedWindowScriptObjectCleared(Frame*); - void windowScriptObjectAvailable(); - - void scriptObjectReady(); - - void populateScriptObjects(); - void resetScriptObjects(); - - void didCommitLoad(DocumentLoader*); - void frameDetachedFromParent(Frame*); - - void didLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length); - - void identifierForInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&); - void willSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); - void didReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&); - void didReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived); - void didFinishLoading(DocumentLoader*, unsigned long identifier); - void didFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&); - void resourceRetrievedByXMLHttpRequest(unsigned long identifier, KJS::UString& sourceString); - -#if ENABLE(DATABASE) - void didOpenDatabase(Database*, const String& domain, const String& name, const String& version); -#endif - - const ResourcesMap& resources() const { return m_resources; } - - void moveWindowBy(float x, float y) const; - void closeWindow(); - - void startDebuggingAndReloadInspectedPage(); - void stopDebugging(); - bool debuggerAttached() const { return m_debuggerAttached; } - - JavaScriptCallFrame* currentCallFrame() const; - - void addBreakpoint(int sourceID, unsigned lineNumber); - void removeBreakpoint(int sourceID, unsigned lineNumber); - - bool pauseOnExceptions(); - void setPauseOnExceptions(bool pause); - - void pauseInDebugger(); - void resumeDebugger(); - - void stepOverStatementInDebugger(); - void stepIntoStatementInDebugger(); - void stepOutOfFunctionInDebugger(); - - void drawNodeHighlight(GraphicsContext&) const; - - void startTiming(const KJS::UString& title); - bool stopTiming(const KJS::UString& title, double& elapsed); - - void startGroup(MessageSource source, KJS::ExecState* exec, const KJS::ArgList& arguments, unsigned lineNumber, const String& sourceURL); - void endGroup(MessageSource source, unsigned lineNumber, const String& sourceURL); -#if USE(V8) - // InspectorController.idl - void addSourceToFrame(unsigned long identifier, Node* frame); - Node* getResourceDocumentNode(unsigned long identifier); - void highlightDOMNode(Node* node); - void hideDOMNodeHighlight(); - void loaded(); - void attach(); - void detach(); - void log(const String& message); - // TODO(jackson): search should return an array of JSRanges - void search(Node* node, const String& query); - DOMWindow* inspectedWindow(); - String platform() const; -#endif - -private: - void focusNode(); - - void addConsoleMessage(ConsoleMessage*); - void addScriptConsoleMessage(const ConsoleMessage*); - -#if USE(V8) - void setScriptObject(v8::Handle<v8::Object> newScriptObject) - { - if (!m_scriptObject.IsEmpty()) { - m_scriptObject.Dispose(); - m_scriptObject.Clear(); - } - - if (!newScriptObject.IsEmpty()) - m_scriptObject = v8::Persistent<v8::Object>::New(newScriptObject); - } -#endif - - void addResource(InspectorResource*); - void removeResource(InspectorResource*); - -#if USE(JSC) - JSObjectRef addScriptResource(InspectorResource*); -#elif USE(V8) - void addScriptResource(InspectorResource*); -#endif - void removeScriptResource(InspectorResource*); - -#if USE(JSC) - JSObjectRef addAndUpdateScriptResource(InspectorResource*); -#elif USE(V8) - void addAndUpdateScriptResource(InspectorResource*); + Vector<RefPtr<KJS::Profile> > m_profiles; #endif - void updateScriptResourceRequest(InspectorResource*); - void updateScriptResourceResponse(InspectorResource*); - void updateScriptResourceType(InspectorResource*); - void updateScriptResource(InspectorResource*, int length); - void updateScriptResource(InspectorResource*, bool finished, bool failed = false); - void updateScriptResource(InspectorResource*, double startTime, double responseReceivedTime, double endTime); - - void pruneResources(ResourcesMap*, DocumentLoader* loaderToKeep = 0); - void removeAllResources(ResourcesMap* map) { pruneResources(map); } - - // Return true if the inspector should track request/response activity. - // Chrome's policy is to only log requests if the inspector is already open. - // This reduces the passive bloat from InspectorController: http://b/1113875 - bool trackResources() const { return m_trackResources; } - - // Start/stop resource tracking. - void enableTrackResources(bool trackResources); - - bool m_trackResources; - -#if ENABLE(DATABASE) - JSObjectRef addDatabaseScriptResource(InspectorDatabaseResource*); - void removeDatabaseScriptResource(InspectorDatabaseResource*); -#endif - - JSValueRef callSimpleFunction(JSContextRef, JSObjectRef thisObject, const char* functionName) const; - JSValueRef callFunction(JSContextRef, JSObjectRef thisObject, const char* functionName, size_t argumentCount, const JSValueRef arguments[], JSValueRef& exception) const; - - bool handleException(JSContextRef, JSValueRef exception, unsigned lineNumber) const; - - void showWindow(); - void closeWindow(); - - virtual void didParseSource(KJS::ExecState*, const KJS::SourceProvider& source, int startingLineNumber, const KJS::UString& sourceURL, int sourceID); - virtual void failedToParseSource(KJS::ExecState*, const KJS::SourceProvider& source, int startingLineNumber, const KJS::UString& sourceURL, int errorLine, const KJS::UString& errorMessage); - virtual void didPause(); - - Page* m_inspectedPage; - InspectorClient* m_client; - Page* m_page; - RefPtr<Node> m_nodeToFocus; - RefPtr<InspectorResource> m_mainResource; - ResourcesMap m_resources; - HashSet<String> m_knownResources; - FrameResourcesMap m_frameResources; - Vector<ConsoleMessage*> m_consoleMessages; - Vector<RefPtr<KJS::Profile> > m_profiles; - HashMap<String, double> m_times; + HashMap<String, double> m_times; + HashMap<String, unsigned> m_counts; #if ENABLE(DATABASE) DatabaseResourcesSet m_databaseResources; #endif @@ -574,7 +339,6 @@ private: bool m_attachDebuggerWhenShown; bool m_recordingUserInitiatedProfile; SpecialPanels m_showAfterVisible; - // TODO(ojan): Come up with a solution for this that avoids collisions. unsigned long m_nextIdentifier; RefPtr<Node> m_highlightedNode; unsigned m_groupLevel; @@ -582,6 +346,4 @@ private: } // namespace WebCore -#endif - #endif // !defined(InspectorController_h) |