| Index: third_party/WebKit/WebCore/inspector/InspectorController.h
|
| ===================================================================
|
| --- third_party/WebKit/WebCore/inspector/InspectorController.h (revision 9391)
|
| +++ third_party/WebKit/WebCore/inspector/InspectorController.h (working copy)
|
| @@ -1,404 +1,418 @@
|
| -/*
|
| - * Copyright (C) 2007 Apple Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - *
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
|
| - * its contributors may be used to endorse or promote products derived
|
| - * from this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
| - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
| - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
| - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#ifndef InspectorController_h
|
| -#define InspectorController_h
|
| -
|
| -#include "Console.h"
|
| -#include "PlatformString.h"
|
| -#include "StringHash.h"
|
| -#include "Timer.h"
|
| -#if USE(JSC)
|
| -#include <JavaScriptCore/JSContextRef.h>
|
| -#elif USE(V8)
|
| -#include <wtf/RefCounted.h>
|
| -#include <v8.h>
|
| -#endif
|
| -#include <wtf/HashMap.h>
|
| -#include <wtf/HashSet.h>
|
| -#include <wtf/Vector.h>
|
| -
|
| -#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| -#include "JavaScriptDebugListener.h"
|
| -#endif
|
| -
|
| -#if USE(JSC)
|
| -namespace JSC {
|
| - class Profile;
|
| - class UString;
|
| -}
|
| -#endif
|
| -
|
| -namespace WebCore {
|
| -
|
| -class CachedResource;
|
| -class Database;
|
| -class DOMWindow;
|
| -class DocumentLoader;
|
| -class GraphicsContext;
|
| -class HitTestResult;
|
| -class InspectorClient;
|
| -class JavaScriptCallFrame;
|
| -class Node;
|
| -class Page;
|
| -class ResourceRequest;
|
| -class ResourceResponse;
|
| -class ResourceError;
|
| -class ScriptCallStack;
|
| -class ScriptState;
|
| -class SharedBuffer;
|
| -
|
| -struct ConsoleMessage;
|
| -struct InspectorDatabaseResource;
|
| -struct InspectorResource;
|
| -
|
| -class InspectorController : public RefCounted<InspectorController>
|
| -#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| - , JavaScriptDebugListener
|
| -#endif
|
| -{
|
| -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;
|
| -
|
| - struct Setting {
|
| - enum Type {
|
| - NoType, StringType, StringVectorType, DoubleType, IntegerType, BooleanType
|
| - };
|
| -
|
| - Setting()
|
| - : m_type(NoType)
|
| - {
|
| - }
|
| -
|
| - Type type() const { return m_type; }
|
| -
|
| - String string() const { ASSERT(m_type == StringType); return m_string; }
|
| - const Vector<String>& stringVector() const { ASSERT(m_type == StringVectorType); return m_stringVector; }
|
| - double doubleValue() const { ASSERT(m_type == DoubleType); return m_simpleContent.m_double; }
|
| - long integerValue() const { ASSERT(m_type == IntegerType); return m_simpleContent.m_integer; }
|
| - bool booleanValue() const { ASSERT(m_type == BooleanType); return m_simpleContent.m_boolean; }
|
| -
|
| - void set(const String& value) { m_type = StringType; m_string = value; }
|
| - void set(const Vector<String>& value) { m_type = StringVectorType; m_stringVector = value; }
|
| - void set(double value) { m_type = DoubleType; m_simpleContent.m_double = value; }
|
| - void set(long value) { m_type = IntegerType; m_simpleContent.m_integer = value; }
|
| - void set(bool value) { m_type = BooleanType; m_simpleContent.m_boolean = value; }
|
| -
|
| - private:
|
| - Type m_type;
|
| -
|
| - String m_string;
|
| - Vector<String> m_stringVector;
|
| -
|
| - union {
|
| - double m_double;
|
| - long m_integer;
|
| - bool m_boolean;
|
| - } m_simpleContent;
|
| - };
|
| -
|
| - InspectorController(Page*, InspectorClient*);
|
| - ~InspectorController();
|
| -
|
| - void inspectedPageDestroyed();
|
| - void pageDestroyed() { m_page = 0; }
|
| -
|
| - bool enabled() const;
|
| -
|
| - Page* inspectedPage() const { return m_inspectedPage; }
|
| -
|
| - const Setting& setting(const String& key) const;
|
| - void setSetting(const String& key, const Setting&);
|
| -
|
| - String localizedStringsURL();
|
| -
|
| - void inspect(Node*);
|
| - void highlight(Node*);
|
| - void hideHighlight();
|
| -
|
| - void show();
|
| - void showPanel(SpecialPanels);
|
| - void close();
|
| -
|
| -#if USE(JSC)
|
| - bool isRecordingUserInitiatedProfile() const { return m_recordingUserInitiatedProfile; }
|
| - void startUserInitiatedProfilingSoon();
|
| - void startUserInitiatedProfiling(Timer<InspectorController>* = 0);
|
| - void stopUserInitiatedProfiling();
|
| -
|
| - void enableProfiler(bool skipRecompile = false);
|
| - void disableProfiler();
|
| - bool profilerEnabled() const { return enabled() && m_profilerEnabled; }
|
| -#endif
|
| -
|
| - bool windowVisible();
|
| - void setWindowVisible(bool visible = true, bool attached = false);
|
| -
|
| - void addMessageToConsole(MessageSource, MessageLevel, ScriptCallStack*);
|
| - void addMessageToConsole(MessageSource, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
|
| - void clearConsoleMessages();
|
| - void toggleRecordButton(bool);
|
| -
|
| -#if USE(JSC)
|
| - void addProfile(PassRefPtr<JSC::Profile>, unsigned lineNumber, const JSC::UString& sourceURL);
|
| - void addProfileMessageToConsole(PassRefPtr<JSC::Profile> prpProfile, unsigned lineNumber, const JSC::UString& sourceURL);
|
| - void addScriptProfile(JSC::Profile* profile);
|
| - const ProfilesArray& profiles() const { return m_profiles; }
|
| -#endif
|
| -
|
| - void attachWindow();
|
| - void detachWindow();
|
| -
|
| - void setAttachedWindow(bool);
|
| - void setAttachedWindowHeight(unsigned height);
|
| -
|
| - void toggleSearchForNodeInPage();
|
| - bool searchingForNodeInPage() { return m_searchingForNode; };
|
| - void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
|
| - void handleMousePressOnNode(Node*);
|
| -
|
| -#if USE(JSC)
|
| - JSContextRef scriptContext() const { return m_scriptContext; };
|
| - void setScriptContext(JSContextRef context) { m_scriptContext = context; };
|
| -#elif USE(V8)
|
| - void setScriptObject(v8::Handle<v8::Object> newScriptObject);
|
| -#endif
|
| -
|
| - void inspectedWindowScriptObjectCleared(Frame*);
|
| - void windowScriptObjectAvailable();
|
| -
|
| - void scriptObjectReady();
|
| -
|
| - void populateScriptObjects();
|
| - void resetScriptObjects();
|
| -
|
| - void didCommitLoad(DocumentLoader*);
|
| - void frameDetachedFromParent(Frame*);
|
| -
|
| - void didLoadResourceFromMemoryCache(DocumentLoader*, const CachedResource*);
|
| -
|
| - 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&);
|
| -#if USE(JSC)
|
| - void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const JSC::UString& sourceString);
|
| -#elif USE(V8)
|
| - void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const String& sourceString);
|
| -#endif
|
| -
|
| -#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();
|
| -
|
| -#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| - void enableDebugger();
|
| - void disableDebugger();
|
| -
|
| - bool debuggerEnabled() const { return m_debuggerEnabled; }
|
| -
|
| - JavaScriptCallFrame* currentCallFrame() const;
|
| -
|
| - void addBreakpoint(intptr_t sourceID, unsigned lineNumber);
|
| - void removeBreakpoint(intptr_t sourceID, unsigned lineNumber);
|
| -
|
| - bool pauseOnExceptions();
|
| - void setPauseOnExceptions(bool pause);
|
| -
|
| - void pauseInDebugger();
|
| - void resumeDebugger();
|
| -
|
| - void stepOverStatementInDebugger();
|
| - void stepIntoStatementInDebugger();
|
| - void stepOutOfFunctionInDebugger();
|
| -#endif
|
| -
|
| - void drawNodeHighlight(GraphicsContext&) const;
|
| -
|
| - void count(const String& title, unsigned lineNumber, const String& sourceID);
|
| -
|
| - void startTiming(const String& title);
|
| - bool stopTiming(const String& title, double& elapsed);
|
| -
|
| - void startGroup(MessageSource source, ScriptCallStack* callFrame);
|
| - 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();
|
| - // 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(ScriptState*, ConsoleMessage*);
|
| - void addScriptConsoleMessage(const ConsoleMessage*);
|
| -
|
| - 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*);
|
| -#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;
|
| -
|
| - // Helper function to determine when the script object is initialized
|
| -#if USE(JSC)
|
| - inline bool hasScriptObject() const { return m_scriptObject; }
|
| -#elif USE(V8)
|
| - inline bool hasScriptObject() { return !m_scriptObject.IsEmpty(); }
|
| -#endif
|
| -
|
| -#if ENABLE(DATABASE)
|
| -#if USE(JSC)
|
| - JSObjectRef addDatabaseScriptResource(InspectorDatabaseResource*);
|
| -#elif USE(V8)
|
| - void addDatabaseScriptResource(InspectorDatabaseResource*);
|
| -#endif
|
| - void removeDatabaseScriptResource(InspectorDatabaseResource*);
|
| -#endif
|
| -
|
| -#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;
|
| -#endif
|
| -
|
| - void showWindow();
|
| -
|
| -#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| - virtual void didParseSource(JSC::ExecState*, const JSC::SourceCode&);
|
| - virtual void failedToParseSource(JSC::ExecState*, const JSC::SourceCode&, int errorLine, const JSC::UString& errorMessage);
|
| - virtual void didPause();
|
| -#endif
|
| -
|
| - 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;
|
| -#if USE(JSC)
|
| - ProfilesArray m_profiles;
|
| -#endif
|
| - HashMap<String, double> m_times;
|
| - HashMap<String, unsigned> m_counts;
|
| -#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;
|
| -#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| - bool m_debuggerEnabled;
|
| - bool m_attachDebuggerWhenShown;
|
| -#endif
|
| - bool m_profilerEnabled;
|
| - bool m_recordingUserInitiatedProfile;
|
| - SpecialPanels m_showAfterVisible;
|
| - unsigned long m_nextIdentifier;
|
| - RefPtr<Node> m_highlightedNode;
|
| - unsigned m_groupLevel;
|
| - bool m_searchingForNode;
|
| - int m_currentUserInitiatedProfileNumber;
|
| - unsigned m_nextUserInitiatedProfileNumber;
|
| - ConsoleMessage* m_previousMessage;
|
| -#if USE(JSC)
|
| - Timer<InspectorController> m_startProfiling;
|
| -#endif
|
| -};
|
| -
|
| -} // namespace WebCore
|
| -
|
| -#endif // !defined(InspectorController_h)
|
| +/*
|
| + * Copyright (C) 2007 Apple Inc. All rights reserved.
|
| + *
|
| + * Redistribution and use in source and binary forms, with or without
|
| + * modification, are permitted provided that the following conditions
|
| + * are met:
|
| + *
|
| + * 1. Redistributions of source code must retain the above copyright
|
| + * notice, this list of conditions and the following disclaimer.
|
| + * 2. Redistributions in binary form must reproduce the above copyright
|
| + * notice, this list of conditions and the following disclaimer in the
|
| + * documentation and/or other materials provided with the distribution.
|
| + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
|
| + * its contributors may be used to endorse or promote products derived
|
| + * from this software without specific prior written permission.
|
| + *
|
| + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
| + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
| + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
| + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
| + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| + */
|
| +
|
| +#ifndef InspectorController_h
|
| +#define InspectorController_h
|
| +
|
| +#include "Console.h"
|
| +#include "PlatformString.h"
|
| +#include "StringHash.h"
|
| +#include "Timer.h"
|
| +#if USE(JSC)
|
| +#include <JavaScriptCore/JSContextRef.h>
|
| +#elif USE(V8)
|
| +#include <wtf/RefCounted.h>
|
| +#include <v8.h>
|
| +#endif
|
| +#include <wtf/HashMap.h>
|
| +#include <wtf/HashSet.h>
|
| +#include <wtf/Vector.h>
|
| +
|
| +#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| +#include "JavaScriptDebugListener.h"
|
| +#endif
|
| +
|
| +#if USE(JSC)
|
| +namespace JSC {
|
| + class Profile;
|
| + class UString;
|
| +}
|
| +#endif
|
| +
|
| +namespace WebCore {
|
| +
|
| +class CachedResource;
|
| +class Database;
|
| +class DOMWindow;
|
| +class DocumentLoader;
|
| +class GraphicsContext;
|
| +class HitTestResult;
|
| +class InspectorClient;
|
| +class JavaScriptCallFrame;
|
| +class StorageArea;
|
| +class Node;
|
| +class Page;
|
| +class ResourceRequest;
|
| +class ResourceResponse;
|
| +class ResourceError;
|
| +class ScriptCallStack;
|
| +class ScriptState;
|
| +class SharedBuffer;
|
| +
|
| +struct ConsoleMessage;
|
| +struct InspectorDatabaseResource;
|
| +struct InspectorDOMStorageResource;
|
| +struct InspectorResource;
|
| +
|
| +class InspectorController : public RefCounted<InspectorController>
|
| +#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| + , JavaScriptDebugListener
|
| +#endif
|
| +{
|
| +public:
|
| +
|
| + typedef HashMap<unsigned long, RefPtr<InspectorResource> > ResourcesMap;
|
| + typedef HashMap<RefPtr<Frame>, ResourcesMap*> FrameResourcesMap;
|
| + typedef HashSet<RefPtr<InspectorDatabaseResource> > DatabaseResourcesSet;
|
| + typedef HashSet<RefPtr<InspectorDOMStorageResource> > DOMStorageResourcesSet;
|
| +
|
| + typedef enum {
|
| + CurrentPanel,
|
| + ConsolePanel,
|
| + DatabasesPanel,
|
| + ElementsPanel,
|
| + ProfilesPanel,
|
| + ResourcesPanel,
|
| + ScriptsPanel
|
| + } SpecialPanels;
|
| +
|
| + struct Setting {
|
| + enum Type {
|
| + NoType, StringType, StringVectorType, DoubleType, IntegerType, BooleanType
|
| + };
|
| +
|
| + Setting()
|
| + : m_type(NoType)
|
| + {
|
| + }
|
| +
|
| + Type type() const { return m_type; }
|
| +
|
| + String string() const { ASSERT(m_type == StringType); return m_string; }
|
| + const Vector<String>& stringVector() const { ASSERT(m_type == StringVectorType); return m_stringVector; }
|
| + double doubleValue() const { ASSERT(m_type == DoubleType); return m_simpleContent.m_double; }
|
| + long integerValue() const { ASSERT(m_type == IntegerType); return m_simpleContent.m_integer; }
|
| + bool booleanValue() const { ASSERT(m_type == BooleanType); return m_simpleContent.m_boolean; }
|
| +
|
| + void set(const String& value) { m_type = StringType; m_string = value; }
|
| + void set(const Vector<String>& value) { m_type = StringVectorType; m_stringVector = value; }
|
| + void set(double value) { m_type = DoubleType; m_simpleContent.m_double = value; }
|
| + void set(long value) { m_type = IntegerType; m_simpleContent.m_integer = value; }
|
| + void set(bool value) { m_type = BooleanType; m_simpleContent.m_boolean = value; }
|
| +
|
| + private:
|
| + Type m_type;
|
| +
|
| + String m_string;
|
| + Vector<String> m_stringVector;
|
| +
|
| + union {
|
| + double m_double;
|
| + long m_integer;
|
| + bool m_boolean;
|
| + } m_simpleContent;
|
| + };
|
| +
|
| + InspectorController(Page*, InspectorClient*);
|
| + ~InspectorController();
|
| +
|
| + void inspectedPageDestroyed();
|
| + void pageDestroyed() { m_page = 0; }
|
| +
|
| + bool enabled() const;
|
| +
|
| + Page* inspectedPage() const { return m_inspectedPage; }
|
| +
|
| + const Setting& setting(const String& key) const;
|
| + void setSetting(const String& key, const Setting&);
|
| +
|
| + String localizedStringsURL();
|
| +
|
| + void inspect(Node*);
|
| + void highlight(Node*);
|
| + void hideHighlight();
|
| +
|
| + void show();
|
| + void showPanel(SpecialPanels);
|
| + void close();
|
| +
|
| +#if USE(JSC)
|
| + bool isRecordingUserInitiatedProfile() const { return m_recordingUserInitiatedProfile; }
|
| + void startUserInitiatedProfilingSoon();
|
| + void startUserInitiatedProfiling(Timer<InspectorController>* = 0);
|
| + void stopUserInitiatedProfiling();
|
| +
|
| + void enableProfiler(bool skipRecompile = false);
|
| + void disableProfiler();
|
| + bool profilerEnabled() const { return enabled() && m_profilerEnabled; }
|
| +#endif
|
| +
|
| + bool windowVisible();
|
| + void setWindowVisible(bool visible = true, bool attached = false);
|
| +
|
| + void addMessageToConsole(MessageSource, MessageLevel, ScriptCallStack*);
|
| + void addMessageToConsole(MessageSource, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
|
| + void clearConsoleMessages();
|
| + void toggleRecordButton(bool);
|
| +
|
| +#if USE(JSC)
|
| + void addProfile(PassRefPtr<JSC::Profile>, unsigned lineNumber, const JSC::UString& sourceURL);
|
| + void addProfileMessageToConsole(PassRefPtr<JSC::Profile> prpProfile, unsigned lineNumber, const JSC::UString& sourceURL);
|
| + void addScriptProfile(JSC::Profile* profile);
|
| + const ProfilesArray& profiles() const { return m_profiles; }
|
| +#endif
|
| +
|
| + void attachWindow();
|
| + void detachWindow();
|
| +
|
| + void setAttachedWindow(bool);
|
| + void setAttachedWindowHeight(unsigned height);
|
| +
|
| + void toggleSearchForNodeInPage();
|
| + bool searchingForNodeInPage() { return m_searchingForNode; };
|
| + void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags);
|
| + void handleMousePressOnNode(Node*);
|
| +
|
| +#if USE(JSC)
|
| + JSContextRef scriptContext() const { return m_scriptContext; };
|
| + void setScriptContext(JSContextRef context) { m_scriptContext = context; };
|
| +#elif USE(V8)
|
| + void setScriptObject(v8::Handle<v8::Object> newScriptObject);
|
| +#endif
|
| +
|
| + void inspectedWindowScriptObjectCleared(Frame*);
|
| + void windowScriptObjectAvailable();
|
| +
|
| + void scriptObjectReady();
|
| +
|
| + void populateScriptObjects();
|
| + void resetScriptObjects();
|
| +
|
| + void didCommitLoad(DocumentLoader*);
|
| + void frameDetachedFromParent(Frame*);
|
| +
|
| + void didLoadResourceFromMemoryCache(DocumentLoader*, const CachedResource*);
|
| +
|
| + 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&);
|
| +#if USE(JSC)
|
| + void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const JSC::UString& sourceString);
|
| +#elif USE(V8)
|
| + void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const String& sourceString);
|
| +#endif
|
| +
|
| +#if ENABLE(DATABASE)
|
| + void didOpenDatabase(Database*, const String& domain, const String& name, const String& version);
|
| +#endif
|
| +#if ENABLE(DOM_STORAGE)
|
| + void didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame);
|
| +#endif
|
| +
|
| + const ResourcesMap& resources() const { return m_resources; }
|
| +
|
| + void moveWindowBy(float x, float y) const;
|
| + void closeWindow();
|
| +
|
| +#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| + void enableDebugger();
|
| + void disableDebugger();
|
| +
|
| + bool debuggerEnabled() const { return m_debuggerEnabled; }
|
| +
|
| + JavaScriptCallFrame* currentCallFrame() const;
|
| +
|
| + void addBreakpoint(intptr_t sourceID, unsigned lineNumber);
|
| + void removeBreakpoint(intptr_t sourceID, unsigned lineNumber);
|
| +
|
| + bool pauseOnExceptions();
|
| + void setPauseOnExceptions(bool pause);
|
| +
|
| + void pauseInDebugger();
|
| + void resumeDebugger();
|
| +
|
| + void stepOverStatementInDebugger();
|
| + void stepIntoStatementInDebugger();
|
| + void stepOutOfFunctionInDebugger();
|
| +#endif
|
| +
|
| + void drawNodeHighlight(GraphicsContext&) const;
|
| +
|
| + void count(const String& title, unsigned lineNumber, const String& sourceID);
|
| +
|
| + void startTiming(const String& title);
|
| + bool stopTiming(const String& title, double& elapsed);
|
| +
|
| + void startGroup(MessageSource source, ScriptCallStack* callFrame);
|
| + 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();
|
| + // 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(ScriptState*, ConsoleMessage*);
|
| + void addScriptConsoleMessage(const ConsoleMessage*);
|
| +
|
| + 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*);
|
| +#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;
|
| +
|
| + // Helper function to determine when the script object is initialized
|
| +#if USE(JSC)
|
| + inline bool hasScriptObject() const { return m_scriptObject; }
|
| +#elif USE(V8)
|
| + inline bool hasScriptObject() { return !m_scriptObject.IsEmpty(); }
|
| +#endif
|
| +
|
| +#if ENABLE(DATABASE)
|
| +#if USE(JSC)
|
| + JSObjectRef addDatabaseScriptResource(InspectorDatabaseResource*);
|
| +#elif USE(V8)
|
| + void addDatabaseScriptResource(InspectorDatabaseResource*);
|
| +#endif
|
| + void removeDatabaseScriptResource(InspectorDatabaseResource*);
|
| +#endif
|
| +
|
| +#if USE(JSC)
|
| +#if ENABLE(DOM_STORAGE)
|
| + JSObjectRef addDOMStorageScriptResource(InspectorDOMStorageResource*);
|
| + void removeDOMStorageScriptResource(InspectorDOMStorageResource*);
|
| +#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;
|
| +#endif
|
| +
|
| + void showWindow();
|
| +
|
| +#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| + virtual void didParseSource(JSC::ExecState*, const JSC::SourceCode&);
|
| + virtual void failedToParseSource(JSC::ExecState*, const JSC::SourceCode&, int errorLine, const JSC::UString& errorMessage);
|
| + virtual void didPause();
|
| +#endif
|
| +
|
| + 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;
|
| +#if USE(JSC)
|
| + ProfilesArray m_profiles;
|
| +#endif
|
| + HashMap<String, double> m_times;
|
| + HashMap<String, unsigned> m_counts;
|
| +#if ENABLE(DATABASE)
|
| + DatabaseResourcesSet m_databaseResources;
|
| +#endif
|
| +#if USE(JSC)
|
| +#if ENABLE(DOM_STORAGE)
|
| + DOMStorageResourcesSet m_domStorageResources;
|
| +#endif
|
| + JSObjectRef m_scriptObject;
|
| + JSObjectRef m_controllerScriptObject;
|
| + JSContextRef m_scriptContext;
|
| +#elif USE(V8)
|
| + v8::Persistent<v8::Object> m_scriptObject;
|
| +#endif
|
| + bool m_windowVisible;
|
| +#if ENABLE(JAVASCRIPT_DEBUGGER)
|
| + bool m_debuggerEnabled;
|
| + bool m_attachDebuggerWhenShown;
|
| +#endif
|
| + bool m_profilerEnabled;
|
| + bool m_recordingUserInitiatedProfile;
|
| + SpecialPanels m_showAfterVisible;
|
| + unsigned long m_nextIdentifier;
|
| + RefPtr<Node> m_highlightedNode;
|
| + unsigned m_groupLevel;
|
| + bool m_searchingForNode;
|
| + int m_currentUserInitiatedProfileNumber;
|
| + unsigned m_nextUserInitiatedProfileNumber;
|
| + ConsoleMessage* m_previousMessage;
|
| +#if USE(JSC)
|
| + Timer<InspectorController> m_startProfiling;
|
| +#endif
|
| +};
|
| +
|
| +} // namespace WebCore
|
| +
|
| +#endif // !defined(InspectorController_h)
|
|
|