Changeset 31952 in webkit


Ignore:
Timestamp:
Apr 16, 2008 12:19:29 PM (16 years ago)
Author:
Adam Roben
Message:

Pass all arguments to console.{log,warn,info,error} into the Inspector's JS

Part of Bug 17228: console.{log,warn,info,error} should support format
strings, variable arguments
<http://bugs.webkit.org/show_bug.cgi?id=17228>
<rdar://problem/5732828>

We don't use the extra arguments yet.

Reviewed by Tim Hatcher.

  • page/Console.cpp: (WebCore::Console::error): Pass the arguments list to InspectorController. (WebCore::Console::info): Ditto. (WebCore::Console::log): Ditto. (WebCore::Console::warn): Ditto.
  • page/InspectorController.cpp: (WebCore::ConsoleMessage::ConsoleMessage): Added a new constructor that takes an ExecState and a List instead of a String. We wrap and store the JSValues from the List in a Vector<ProtectedPtr<JSValue> >. (WebCore::InspectorController::addMessageToConsole): Added an overload that takes an ExecState and a List. (WebCore::InspectorController::addConsoleMessage): Moved code here from addMessageToConsole. Both overloads of addMessageToConsole now call this helper method. (WebCore::InspectorController::addScriptConsoleMessage): Updated for the new parameter order of WebInspector.ConsoleMessage. If the ConsoleMessage has a non-empty wrappedArguments Vector, we use that instead of the ConsoleMessage's message String.
  • page/InspectorController.h:
  • page/inspector/Console.js: (WebInspector.ConsoleMessage): Removed the explicit message parameter. We now get the message from the unnamed 5th parameter.
  • page/inspector/Resource.js: Updated for the change to WebInspector.ConsoleMessage's parameter order.
Location:
trunk/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r31951 r31952  
     12008-04-15  Adam Roben  <aroben@apple.com>
     2
     3        Pass all arguments to console.{log,warn,info,error} into the Inspector's JS
     4
     5        Part of Bug 17228: console.{log,warn,info,error} should support format
     6        strings, variable arguments
     7        <http://bugs.webkit.org/show_bug.cgi?id=17228>
     8        <rdar://problem/5732828>
     9
     10        We don't use the extra arguments yet.
     11
     12        Reviewed by Tim Hatcher.
     13
     14        * page/Console.cpp:
     15        (WebCore::Console::error): Pass the arguments list to
     16        InspectorController.
     17        (WebCore::Console::info): Ditto.
     18        (WebCore::Console::log): Ditto.
     19        (WebCore::Console::warn): Ditto.
     20        * page/InspectorController.cpp:
     21        (WebCore::ConsoleMessage::ConsoleMessage): Added a new constructor
     22        that takes an ExecState and a List instead of a String. We wrap and
     23        store the JSValues from the List in a Vector<ProtectedPtr<JSValue> >.
     24        (WebCore::InspectorController::addMessageToConsole): Added an overload
     25        that takes an ExecState and a List.
     26        (WebCore::InspectorController::addConsoleMessage): Moved code here
     27        from addMessageToConsole. Both overloads of addMessageToConsole now
     28        call this helper method.
     29        (WebCore::InspectorController::addScriptConsoleMessage): Updated for
     30        the new parameter order of WebInspector.ConsoleMessage. If the
     31        ConsoleMessage has a non-empty wrappedArguments Vector, we use that
     32        instead of the ConsoleMessage's message String.
     33        * page/InspectorController.h:
     34        * page/inspector/Console.js:
     35        (WebInspector.ConsoleMessage): Removed the explicit message parameter.
     36        We now get the message from the unnamed 5th parameter.
     37        * page/inspector/Resource.js: Updated for the change to
     38        WebInspector.ConsoleMessage's parameter order.
     39
    1402008-04-15  Adam Roben  <aroben@apple.com>
    241
  • trunk/WebCore/page/Console.cpp

    r31951 r31952  
    8383
    8484    page->chrome()->client()->addMessageToConsole(message, 0, url);
    85     page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, message, 0, url);
     85    page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, exec, arguments, 0, url);
    8686}
    8787
     
    102102
    103103    page->chrome()->client()->addMessageToConsole(message, 0, url);
    104     page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, message, 0, url);
     104    page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, exec, arguments, 0, url);
    105105}
    106106
     
    121121
    122122    page->chrome()->client()->addMessageToConsole(message, 0, url);
    123     page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, message, 0, url);
     123    page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, exec, arguments, 0, url);
    124124}
    125125
     
    140140
    141141    page->chrome()->client()->addMessageToConsole(message, 0, url);
    142     page->inspectorController()->addMessageToConsole(JSMessageSource, WarningMessageLevel, message, 0, url);
     142    page->inspectorController()->addMessageToConsole(JSMessageSource, WarningMessageLevel, exec, arguments, 0, url);
    143143}
    144144
  • trunk/WebCore/page/InspectorController.cpp

    r31951 r31952  
    7575
    7676using namespace KJS;
     77using namespace std;
    7778
    7879namespace WebCore {
     
    116117    }
    117118
     119    ConsoleMessage(MessageSource s, MessageLevel l, ExecState* exec, const List& args, unsigned li, const String& u)
     120        : source(s)
     121        , level(l)
     122        , wrappedArguments(args.size())
     123        , line(li)
     124        , url(u)
     125    {
     126        JSLock lock;
     127        for (unsigned i = 0; i < args.size(); ++i)
     128            wrappedArguments[i] = JSInspectedObjectWrapper::wrap(exec, args[i]);
     129    }
     130
    118131    MessageSource source;
    119132    MessageLevel level;
    120133    String message;
     134    Vector<ProtectedPtr<JSValue> > wrappedArguments;
    121135    unsigned line;
    122136    String url;
     
    889903}
    890904
     905void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, ExecState* exec, const List& arguments, unsigned lineNumber, const String& sourceURL)
     906{
     907    if (!enabled())
     908        return;
     909
     910    addConsoleMessage(new ConsoleMessage(source, level, exec, arguments, lineNumber, sourceURL));
     911}
     912
    891913void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
    892914{
     
    894916        return;
    895917
    896     ConsoleMessage* consoleMessage = new ConsoleMessage(source, level, message, lineNumber, sourceID);
     918    addConsoleMessage(new ConsoleMessage(source, level, message, lineNumber, sourceID));
     919}
     920
     921void InspectorController::addConsoleMessage(ConsoleMessage* consoleMessage)
     922{
     923    ASSERT(enabled());
     924    ASSERT_ARG(consoleMessage, consoleMessage);
     925
    897926    m_consoleMessages.append(consoleMessage);
    898927
     
    15601589    JSValueRef sourceValue = JSValueMakeNumber(m_scriptContext, message->source);
    15611590    JSValueRef levelValue = JSValueMakeNumber(m_scriptContext, message->level);
    1562     JSRetainPtr<JSStringRef> messageString(Adopt, JSStringCreateWithCharacters(message->message.characters(), message->message.length()));
    1563     JSValueRef messageValue = JSValueMakeString(m_scriptContext, messageString.get());
    15641591    JSValueRef lineValue = JSValueMakeNumber(m_scriptContext, message->line);
    15651592    JSRetainPtr<JSStringRef> urlString(Adopt, JSStringCreateWithCharacters(message->url.characters(), message->url.length()));
    15661593    JSValueRef urlValue = JSValueMakeString(m_scriptContext, urlString.get());
    15671594
    1568     JSValueRef args[] = { sourceValue, levelValue, messageValue, lineValue, urlValue };
    1569     JSObjectRef messageObject = JSObjectCallAsConstructor(m_scriptContext, messageConstructor, 5, args, &exception);
     1595    static const unsigned maximumMessageArguments = 256;
     1596    JSValueRef arguments[maximumMessageArguments];
     1597    unsigned argumentCount = 0;
     1598    arguments[argumentCount++] = sourceValue;
     1599    arguments[argumentCount++] = levelValue;
     1600    arguments[argumentCount++] = lineValue;
     1601    arguments[argumentCount++] = urlValue;
     1602
     1603    if (!message->wrappedArguments.isEmpty()) {
     1604        unsigned remainingSpaceInArguments = maximumMessageArguments - argumentCount;
     1605        unsigned argumentsToAdd = min(remainingSpaceInArguments, static_cast<unsigned>(message->wrappedArguments.size()));
     1606        for (unsigned i = 0; i < argumentsToAdd; ++i)
     1607            arguments[argumentCount++] = toRef(message->wrappedArguments[i]);
     1608    } else {
     1609        JSRetainPtr<JSStringRef> messageString(Adopt, JSStringCreateWithCharacters(message->message.characters(), message->message.length()));
     1610        JSValueRef messageValue = JSValueMakeString(m_scriptContext, messageString.get());
     1611        arguments[argumentCount++] = messageValue;
     1612    }
     1613
     1614    JSObjectRef messageObject = JSObjectCallAsConstructor(m_scriptContext, messageConstructor, argumentCount, arguments, &exception);
    15701615    if (HANDLE_EXCEPTION(exception))
    15711616        return;
  • trunk/WebCore/page/InspectorController.h

    r31951 r31952  
    9292    void setWindowVisible(bool visible = true);
    9393
     94    void addMessageToConsole(MessageSource, MessageLevel, KJS::ExecState*, const KJS::List& arguments, unsigned lineNumber, const String& sourceID);
    9495    void addMessageToConsole(MessageSource, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
    9596
     
    133134    void focusNode();
    134135
     136    void addConsoleMessage(ConsoleMessage*);
    135137    void addScriptConsoleMessage(const ConsoleMessage*);
    136138
  • trunk/WebCore/page/inspector/Console.js

    r31909 r31952  
    415415WebInspector.Console.prototype.__proto__ = WebInspector.View.prototype;
    416416
    417 WebInspector.ConsoleMessage = function(source, level, message, line, url)
     417WebInspector.ConsoleMessage = function(source, level, line, url)
    418418{
    419419    this.source = source;
    420420    this.level = level;
    421     this.message = message;
    422421    this.line = line;
    423422    this.url = url;
     423
     424    this.message = arguments[4];
    424425}
    425426
  • trunk/WebCore/page/inspector/Resource.js

    r31922 r31952  
    434434        /*
    435435        var msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other,
    436                     WebInspector.ConsoleMessage.MessageLevel.Tip, tip.message, -1, this.url);
     436                    WebInspector.ConsoleMessage.MessageLevel.Tip, -1, this.url, tip.message);
    437437        WebInspector.consolePanel.addMessage(msg);
    438438        */
     
    494494                if (!this._mimeTypeIsConsistentWithType())
    495495                    msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other,
    496                                 WebInspector.ConsoleMessage.MessageLevel.Warning,
     496                                WebInspector.ConsoleMessage.MessageLevel.Warning, -1, this.url,
    497497                                String.sprintf(WebInspector.Warnings.IncorrectMIMEType.message,
    498                                 WebInspector.Resource.Type.toString(this.type), this.mimeType),
    499                                 -1, this.url);
     498                                    WebInspector.Resource.Type.toString(this.type), this.mimeType));
    500499                break;
    501500        }
Note: See TracChangeset for help on using the changeset viewer.