WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Bug fixed
MyThirdPatch7.txt (text/plain), 16.33 KB, created by
Keishi Hattori
on 2008-07-07 04:14:23 PDT
(
hide
)
Description:
Bug fixed
Filename:
MIME Type:
Creator:
Keishi Hattori
Created:
2008-07-07 04:14:23 PDT
Size:
16.33 KB
patch
obsolete
>Index: WebCore/ChangeLog >=================================================================== >--- WebCore/ChangeLog (revision 35033) >+++ WebCore/ChangeLog (working copy) >@@ -1,3 +1,28 @@ >+2008-07-07 Keishi Hattori <casey.hattori@gmail.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * bindings/js/JSConsoleCustom.cpp: >+ (WebCore::JSConsole::group): >+ * page/Console.cpp: >+ (WebCore::Console::group): >+ (WebCore::Console::groupEnd): >+ * page/Console.h: >+ (WebCore::): >+ * page/Console.idl: Added group/groupEnd. >+ * page/InspectorController.cpp: >+ (WebCore::ConsoleMessage::ConsoleMessage): >+ (WebCore::InspectorController::InspectorController): Added m_groupLevel. >+ (WebCore::InspectorController::addMessageToConsole): Added groupLevel argument. >+ (WebCore::InspectorController::startGroup): Increments m_groupLevel by one and calls js function if needed. >+ (WebCore::InspectorController::endGroup): Decrements m_groupLevel by one and calls js function if needed. >+ (WebCore::InspectorController::addScriptConsoleMessage): Added groupLevel argument. >+ (WebCore::InspectorController::didCommitLoad): Added line to reset m_groupLevel. >+ * page/InspectorController.h: >+ * page/inspector/Console.js: Added a div that wraps the messages. >+ * page/inspector/inspector.css: >+ * page/inspector/inspector.js: Added startGroup/endGroup. >+ > 2008-07-06 Sam Weinig <sam@webkit.org> > > Reviewed by Dan Bernstein. >Index: WebCore/bindings/js/JSConsoleCustom.cpp >=================================================================== >--- WebCore/bindings/js/JSConsoleCustom.cpp (revision 35024) >+++ WebCore/bindings/js/JSConsoleCustom.cpp (working copy) >@@ -83,4 +83,10 @@ JSValue* JSConsole::profileEnd(ExecState > return jsUndefined(); > } > >+JSValue* JSConsole::group(ExecState* exec, const ArgList& arguments) >+{ >+ impl()->group(exec, arguments); >+ return jsUndefined(); >+} >+ > } // namespace WebCore >Index: WebCore/page/Console.cpp >=================================================================== >--- WebCore/page/Console.cpp (revision 35024) >+++ WebCore/page/Console.cpp (working copy) >@@ -266,6 +266,37 @@ void Console::profileEnd(ExecState* exec > Profiler::profiler()->stopProfiling(exec, title); > } > >+void Console::group(ExecState* exec, const ArgList& arguments) >+{ >+ if (!m_frame) >+ return; >+ >+ Page* page = m_frame->page(); >+ if (!page) >+ return; >+ >+ page->inspectorController()->startGroup(); >+ >+ const KURL& url = m_frame->loader()->url(); >+ >+ if (arguments.isEmpty()) >+ page->inspectorController()->addMessageToConsole(JSMessageSource, GroupTitleMessageLevel, String(), 0, url.string()); >+ else >+ page->inspectorController()->addMessageToConsole(JSMessageSource, GroupTitleMessageLevel, exec, arguments, 0, url.string()); >+} >+ >+void Console::groupEnd() >+{ >+ if (!m_frame) >+ return; >+ >+ Page* page = m_frame->page(); >+ if (!page) >+ return; >+ >+ page->inspectorController()->endGroup(); >+} >+ > void Console::finishedProfiling(PassRefPtr<Profile> prpProfile) > { > if (Page* page = m_frame->page()) >Index: WebCore/page/Console.h >=================================================================== >--- WebCore/page/Console.h (revision 35024) >+++ WebCore/page/Console.h (working copy) >@@ -57,7 +57,8 @@ namespace WebCore { > TipMessageLevel, > LogMessageLevel, > WarningMessageLevel, >- ErrorMessageLevel >+ ErrorMessageLevel, >+ GroupTitleMessageLevel > }; > > class Console : public RefCounted<Console>, public KJS::ProfilerClient { >@@ -76,6 +77,8 @@ namespace WebCore { > void assertCondition(bool condition, KJS::ExecState*, const KJS::ArgList& arguments); > void profile(KJS::ExecState*, const KJS::ArgList& arguments); > void profileEnd(KJS::ExecState*, const KJS::ArgList& arguments); >+ void group(KJS::ExecState*, const KJS::ArgList& arguments); >+ void groupEnd(); > > void finishedProfiling(PassRefPtr<KJS::Profile>); > >Index: WebCore/page/Console.idl >=================================================================== >--- WebCore/page/Console.idl (revision 35024) >+++ WebCore/page/Console.idl (working copy) >@@ -38,6 +38,8 @@ module window { > > [Custom] void profile(in DOMString title); > [Custom] void profileEnd(); >+ [Custom] void group(); >+ void groupEnd(); > }; > > } >Index: WebCore/page/InspectorController.cpp >=================================================================== >--- WebCore/page/InspectorController.cpp (revision 35024) >+++ WebCore/page/InspectorController.cpp (working copy) >@@ -152,21 +152,23 @@ JSValueRef InspectorController::callFunc > // ConsoleMessage Struct > > struct ConsoleMessage { >- ConsoleMessage(MessageSource s, MessageLevel l, const String& m, unsigned li, const String& u) >+ ConsoleMessage(MessageSource s, MessageLevel l, const String& m, unsigned li, const String& u, unsigned g) > : source(s) > , level(l) > , message(m) > , line(li) > , url(u) >+ , groupLevel(g) > { > } > >- ConsoleMessage(MessageSource s, MessageLevel l, ExecState* exec, const ArgList& args, unsigned li, const String& u) >+ ConsoleMessage(MessageSource s, MessageLevel l, ExecState* exec, const ArgList& args, unsigned li, const String& u, unsigned g) > : source(s) > , level(l) > , wrappedArguments(args.size()) > , line(li) > , url(u) >+ , groupLevel(g) > { > JSLock lock(false); > for (unsigned i = 0; i < args.size(); ++i) >@@ -179,6 +181,7 @@ struct ConsoleMessage { > Vector<ProtectedPtr<JSValue> > wrappedArguments; > unsigned line; > String url; >+ unsigned groupLevel; > }; > > // XMLHttpRequestResource Class >@@ -1023,6 +1026,7 @@ InspectorController::InspectorController > , m_recordingUserInitiatedProfile(false) > , m_showAfterVisible(ElementsPanel) > , m_nextIdentifier(-2) >+ , m_groupLevel(0) > { > ASSERT_ARG(page, page); > ASSERT_ARG(client, client); >@@ -1187,7 +1191,7 @@ void InspectorController::addMessageToCo > if (!enabled()) > return; > >- addConsoleMessage(new ConsoleMessage(source, level, exec, arguments, lineNumber, sourceURL)); >+ addConsoleMessage(new ConsoleMessage(source, level, exec, arguments, lineNumber, sourceURL, m_groupLevel)); > } > > void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID) >@@ -1195,7 +1199,7 @@ void InspectorController::addMessageToCo > if (!enabled()) > return; > >- addConsoleMessage(new ConsoleMessage(source, level, message, lineNumber, sourceID)); >+ addConsoleMessage(new ConsoleMessage(source, level, message, lineNumber, sourceID, m_groupLevel)); > } > > void InspectorController::addConsoleMessage(ConsoleMessage* consoleMessage) >@@ -1209,6 +1213,29 @@ void InspectorController::addConsoleMess > addScriptConsoleMessage(consoleMessage); > } > >+void InspectorController::startGroup() >+{ >+ JSValueRef exception = 0; >+ >+ ++m_groupLevel; >+ >+ if (windowVisible()) >+ callFunction(m_scriptContext, m_scriptObject, "startGroupInConsole", 0, NULL, exception); >+} >+ >+void InspectorController::endGroup() >+{ >+ JSValueRef exception = 0; >+ >+ if (m_groupLevel == 0) >+ return; >+ >+ --m_groupLevel; >+ >+ if (windowVisible()) >+ callFunction(m_scriptContext, m_scriptObject, "endGroupInConsole", 0, NULL, exception); >+} >+ > void InspectorController::addProfile(PassRefPtr<Profile> prpProfile) > { > if (!enabled()) >@@ -1856,6 +1883,7 @@ void InspectorController::addScriptConso > JSValueRef levelValue = JSValueMakeNumber(m_scriptContext, message->level); > JSValueRef lineValue = JSValueMakeNumber(m_scriptContext, message->line); > JSValueRef urlValue = JSValueMakeString(m_scriptContext, jsStringRef(message->url).get()); >+ JSValueRef groupLevelValue = JSValueMakeNumber(m_scriptContext, message->groupLevel); > > static const unsigned maximumMessageArguments = 256; > JSValueRef arguments[maximumMessageArguments]; >@@ -1864,6 +1892,7 @@ void InspectorController::addScriptConso > arguments[argumentCount++] = levelValue; > arguments[argumentCount++] = lineValue; > arguments[argumentCount++] = urlValue; >+ arguments[argumentCount++] = groupLevelValue; > > if (!message->wrappedArguments.isEmpty()) { > unsigned remainingSpaceInArguments = maximumMessageArguments - argumentCount; >@@ -1943,6 +1972,7 @@ void InspectorController::didCommitLoad( > > deleteAllValues(m_consoleMessages); > m_consoleMessages.clear(); >+ m_groupLevel = 0; > > m_profiles.clear(); > >Index: WebCore/page/InspectorController.h >=================================================================== >--- WebCore/page/InspectorController.h (revision 35024) >+++ WebCore/page/InspectorController.h (working copy) >@@ -168,6 +168,9 @@ public: > void stepOutOfFunctionInDebugger(); > > void drawNodeHighlight(GraphicsContext&) const; >+ >+ void startGroup(); >+ void endGroup(); > > private: > void focusNode(); >@@ -232,6 +235,7 @@ private: > SpecialPanels m_showAfterVisible; > long long m_nextIdentifier; > RefPtr<Node> m_highlightedNode; >+ unsigned m_groupLevel; > }; > > } // namespace WebCore >Index: WebCore/page/inspector/Console.js >=================================================================== >--- WebCore/page/inspector/Console.js (revision 35024) >+++ WebCore/page/inspector/Console.js (working copy) >@@ -47,6 +47,12 @@ WebInspector.Console = function() > this.clearButton = document.getElementById("clear-console-status-bar-item"); > this.clearButton.title = WebInspector.UIString("Clear console log."); > this.clearButton.addEventListener("click", this._clearButtonClicked.bind(this), false); >+ >+ this.topGroup = this._createGroup(); >+ this.messagesElement.insertBefore(this.topGroup, this.promptElement); >+ >+ this.groupLevel = 0; >+ this.currentGroup = this.topGroup; > > document.getElementById("main-status-bar").addEventListener("mousedown", this._startStatusBarDragging.bind(this), true); > } >@@ -143,8 +149,15 @@ WebInspector.Console.prototype = { > > this.messages.push(msg); > >+ if (typeof msg.groupLevel === "number") { >+ while (msg.groupLevel > this.groupLevel) >+ this.startGroup(); >+ while (msg.groupLevel < this.groupLevel) >+ this.endGroup(); >+ } >+ > var element = msg.toMessageElement(); >- this.messagesElement.insertBefore(element, this.promptElement); >+ this.currentGroup.appendChild(element); > this.promptElement.scrollIntoView(false); > }, > >@@ -154,8 +167,9 @@ WebInspector.Console.prototype = { > > this.messages = []; > >- while (this.messagesElement.firstChild != this.promptElement) >- this.messagesElement.removeChild(this.messagesElement.firstChild); >+ this.groupLevel = 0; >+ this.currentGroup = this.topGroup; >+ this.topGroup.removeChildren(); > }, > > completions: function(wordRange, bestMatchOnly) >@@ -209,6 +223,28 @@ WebInspector.Console.prototype = { > return results; > }, > >+ startGroup: function() { >+ this.groupLevel++; >+ groupElement = this._createGroup(); >+ this.currentGroup.appendChild(groupElement);groupElement.className += " " + this.groupLevel; >+ this.currentGroup = groupElement; >+ }, >+ >+ endGroup: function() { >+ if (this.groupLevel < 1) >+ return; >+ >+ this.groupLevel--; >+ >+ this.currentGroup = this.currentGroup.parentNode; >+ }, >+ >+ _createGroup: function() { >+ var element = document.createElement("div"); >+ element.addStyleClass("console-group"); >+ return element; >+ }, >+ > _toggleButtonClicked: function() > { > this.visible = !this.visible; >@@ -239,6 +275,17 @@ WebInspector.Console.prototype = { > > _messagesClicked: function(event) > { >+ var groupTitleElement = event.target.enclosingNodeOrSelfWithClass("console-group-title-level"); >+ if (groupTitleElement) { >+ var groupElement = groupTitleElement.enclosingNodeOrSelfWithClass("console-group"); >+ if (groupElement) >+ if (groupElement.hasStyleClass("collapsed")) >+ groupElement.removeStyleClass("collapsed"); >+ else >+ groupElement.addStyleClass("collapsed"); >+ groupTitleElement.scrollIntoViewIfNeeded(true); >+ } >+ > var link = event.target.enclosingNodeOrSelfWithNodeName("a"); > if (!link || !link.representedNode) > return; >@@ -443,19 +490,20 @@ WebInspector.Console.prototype = { > > WebInspector.Console.prototype.__proto__ = WebInspector.View.prototype; > >-WebInspector.ConsoleMessage = function(source, level, line, url) >+WebInspector.ConsoleMessage = function(source, level, line, url, groupLevel) > { > this.source = source; > this.level = level; > this.line = line; > this.url = url; >+ this.groupLevel = groupLevel; > > // This _format call passes in true for the plainText argument. The result's textContent is > // used for inline message bubbles in SourceFrames, or other plain-text representations. >- this.message = this._format(Array.prototype.slice.call(arguments, 4), true).textContent; >+ this.message = this._format(Array.prototype.slice.call(arguments, 5), true).textContent; > > // The formatedMessage property is used for the rich and interactive console. >- this.formattedMessage = this._format(Array.prototype.slice.call(arguments, 4)); >+ this.formattedMessage = this._format(Array.prototype.slice.call(arguments, 5)); > } > > WebInspector.ConsoleMessage.prototype = { >@@ -541,6 +589,9 @@ WebInspector.ConsoleMessage.prototype = > break; > case WebInspector.ConsoleMessage.MessageLevel.Error: > element.addStyleClass("console-error-level"); >+ break; >+ case WebInspector.ConsoleMessage.MessageLevel.GroupTitle: >+ element.addStyleClass("console-group-title-level"); > } > > var messageTextElement = document.createElement("span"); >@@ -605,6 +656,9 @@ WebInspector.ConsoleMessage.prototype = > case WebInspector.ConsoleMessage.MessageLevel.Error: > levelString = "Error"; > break; >+ case WebInspector.ConsoleMessage.MessageLevel.GroupTitle: >+ levelString = "GroupTitle"; >+ break; > } > > return sourceString + " " + levelString + ": " + this.formattedMessage.textContent + "\n" + this.url + " line " + this.line; >@@ -624,7 +678,8 @@ WebInspector.ConsoleMessage.MessageLevel > Tip: 0, > Log: 1, > Warning: 2, >- Error: 3 >+ Error: 3, >+ GroupTitle: 4 > } > > WebInspector.ConsoleCommand = function(command, result, formattedResultElement, level) >Index: WebCore/page/inspector/inspector.css >=================================================================== >--- WebCore/page/inspector/inspector.css (revision 35024) >+++ WebCore/page/inspector/inspector.css (working copy) >@@ -532,6 +532,25 @@ body.console-visible #console { > opacity: 1; > } > >+.console-group .console-group { >+ border-left: 10px solid rgb(255, 0, 0); >+} >+ >+.console-group-title-level { >+ background-image: url(Images/disclosureTriangleSmallDown.png); >+ background-repeat: no-repeat; >+ background-position: 3px 1px; >+ font-weight: bold; >+} >+ >+.console-group.collapsed .console-group-title-level { >+ background-image: url(Images/disclosureTriangleSmallRight.png); >+} >+ >+.console-group.collapsed > :not(.console-group-title-level) { >+ display: none; >+} >+ > .auto-complete-text { > color: rgb(128, 128, 128); > -webkit-user-select: none; >Index: WebCore/page/inspector/inspector.js >=================================================================== >--- WebCore/page/inspector/inspector.js (revision 35024) >+++ WebCore/page/inspector/inspector.js (working copy) >@@ -797,6 +797,16 @@ WebInspector.addMessageToConsole = funct > this.console.addMessage(msg); > } > >+WebInspector.startGroupInConsole = function(msg) >+{ >+ this.console.startGroup(msg); >+} >+ >+WebInspector.endGroupInConsole = function(msg) >+{ >+ this.console.endGroup(msg); >+} >+ > WebInspector.addProfile = function(profile) > { > this.panels.profiles.addProfile(profile);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
aroben
:
review-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 19158
:
21986
|
22016
|
22024
|
22026
|
22063
|
22082
|
22085
|
22097
|
22125
|
22126
|
22344
|
22347
|
22405
|
22446
|
22447
|
22452