Web Inspector: add console messages for WebGL shader compile and program link errors...
authordrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Jun 2017 18:35:31 +0000 (18:35 +0000)
committerdrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Jun 2017 18:35:31 +0000 (18:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143236
<rdar://problem/20352149>

Reviewed by Dean Jackson.

Source/WebCore:

Test: fast/canvas/webgl/shader-compile-logging.html

* html/canvas/WebGLRenderingContextBase.h:
* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::checkFramebufferStatus):
(WebCore::WebGLRenderingContextBase::compileShader):
(WebCore::WebGLRenderingContextBase::recycleContext):
(WebCore::WebGLRenderingContextBase::checkTextureCompleteness):
(WebCore::WebGLRenderingContextBase::printToConsole):
(WebCore::WebGLRenderingContextBase::maybeRestoreContext):
(WebCore::WebGLRenderingContextBase::synthesizeGLError):
(WebCore::WebGLRenderingContextBase::printGLErrorToConsole): Deleted.
(WebCore::WebGLRenderingContextBase::printWarningToConsole): Deleted.
(WebCore::WebGLRenderingContextBase::printGLWarningToConsole): Deleted.
Unify console logging helper functions to all follow the same path. Additionally, errors
now generate stack traces. Shader compilation errors are now logged as well.

* dom/Document.h:
* dom/Document.cpp:
(WebCore::Document::addConsoleMessage):
* dom/ScriptExecutionContext.h:
(WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
* page/PageConsoleClient.h:
* page/PageConsoleClient.cpp:
(WebCore::PageConsoleClient::addMessage):
* workers/WorkerGlobalScope.h:
Add new path for logging to the console that accepts a ConsoleMessage.

LayoutTests:

* fast/canvas/webgl/fragment-shader-assertion.html:
* fast/canvas/webgl/shader-compile-logging-expected.txt: Added.
* fast/canvas/webgl/shader-compile-logging.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@218603 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/canvas/webgl/fragment-shader-assertion.html
LayoutTests/fast/canvas/webgl/shader-compile-logging-expected.txt [new file with mode: 0644]
LayoutTests/fast/canvas/webgl/shader-compile-logging.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Document.h
Source/WebCore/dom/ScriptExecutionContext.h
Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp
Source/WebCore/html/canvas/WebGLRenderingContextBase.h
Source/WebCore/page/PageConsoleClient.cpp
Source/WebCore/page/PageConsoleClient.h
Source/WebCore/workers/WorkerGlobalScope.h

index dee0c48..0a2f020 100644 (file)
@@ -1,3 +1,15 @@
+2017-06-20  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: add console messages for WebGL shader compile and program link errors/warnings
+        https://bugs.webkit.org/show_bug.cgi?id=143236
+        <rdar://problem/20352149>
+
+        Reviewed by Dean Jackson.
+
+        * fast/canvas/webgl/fragment-shader-assertion.html:
+        * fast/canvas/webgl/shader-compile-logging-expected.txt: Added.
+        * fast/canvas/webgl/shader-compile-logging.html: Added.
+
 2017-06-19  Antoine Quint  <graouts@apple.com>
 
         Media document experience with long-loading files is poor
index 20cfd35..0c45e59 100644 (file)
@@ -4,6 +4,9 @@
 if (window.testRunner)
        testRunner.dumpAsText();
 
+if (window.internals)
+    window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
+
 function runTest() {
     var canvas = document.getElementById("myCanvas");
     var gl = canvas.getContext("webgl");
diff --git a/LayoutTests/fast/canvas/webgl/shader-compile-logging-expected.txt b/LayoutTests/fast/canvas/webgl/shader-compile-logging-expected.txt
new file mode 100644 (file)
index 0000000..cc2dc35
--- /dev/null
@@ -0,0 +1,11 @@
+CONSOLE MESSAGE: line 19: WebGL: ERROR: 0:2: 'attribute' :  supported in vertex shaders only 
+CONSOLE MESSAGE: line 19: WebGL: ERROR: 0:2: '' : No precision specified for (float)
+CONSOLE MESSAGE: line 19: WebGL: ERROR: 0:4: 'gl_Position' : undeclared identifier
+CONSOLE MESSAGE: line 19: WebGL: ERROR: 0:4: '=' : dimension mismatch
+CONSOLE MESSAGE: line 19: WebGL: ERROR: 0:4: 'assign' : cannot convert from 'attribute 4-component vector of float' to 'float'
+CONSOLE MESSAGE: line 19: WebGL: ERROR: 0:7: 'FRAGMENT_SHADER' : syntax error
+CONSOLE MESSAGE: line 29: WebGL: ERROR: 0:3: 'gl_FragColor' : undeclared identifier
+CONSOLE MESSAGE: line 29: WebGL: ERROR: 0:3: '=' : dimension mismatch
+CONSOLE MESSAGE: line 29: WebGL: ERROR: 0:3: 'assign' : cannot convert from 'const 4-component vector of float' to 'float'
+CONSOLE MESSAGE: line 29: WebGL: ERROR: 0:6: 'VERTEX_SHADER' : syntax error
+Tests that WebGL shader compile errors/warnings are logged to the console.
diff --git a/LayoutTests/fast/canvas/webgl/shader-compile-logging.html b/LayoutTests/fast/canvas/webgl/shader-compile-logging.html
new file mode 100644 (file)
index 0000000..ee08f11
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<body>
+<p>Tests that WebGL shader compile errors/warnings are logged to the console.</p>
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText()
+
+let gl = document.createElement("canvas").getContext("webgl");
+
+let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
+gl.shaderSource(fragmentShader, `
+attribute vec4 position;
+void main() {
+    gl_Position = position;
+}
+
+FRAGMENT_SHADER
+`);
+gl.compileShader(fragmentShader);
+
+let vertexShader = gl.createShader(gl.VERTEX_SHADER);
+gl.shaderSource(vertexShader, `
+void main() {
+    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+}
+
+VERTEX_SHADER
+`);
+gl.compileShader(vertexShader);
+</script>
+</body>
+
index c1272dd..8f7cffe 100644 (file)
@@ -1,3 +1,39 @@
+2017-06-20  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: add console messages for WebGL shader compile and program link errors/warnings
+        https://bugs.webkit.org/show_bug.cgi?id=143236
+        <rdar://problem/20352149>
+
+        Reviewed by Dean Jackson.
+
+        Test: fast/canvas/webgl/shader-compile-logging.html
+
+        * html/canvas/WebGLRenderingContextBase.h:
+        * html/canvas/WebGLRenderingContextBase.cpp:
+        (WebCore::WebGLRenderingContextBase::checkFramebufferStatus):
+        (WebCore::WebGLRenderingContextBase::compileShader):
+        (WebCore::WebGLRenderingContextBase::recycleContext):
+        (WebCore::WebGLRenderingContextBase::checkTextureCompleteness):
+        (WebCore::WebGLRenderingContextBase::printToConsole):
+        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
+        (WebCore::WebGLRenderingContextBase::synthesizeGLError):
+        (WebCore::WebGLRenderingContextBase::printGLErrorToConsole): Deleted.
+        (WebCore::WebGLRenderingContextBase::printWarningToConsole): Deleted.
+        (WebCore::WebGLRenderingContextBase::printGLWarningToConsole): Deleted.
+        Unify console logging helper functions to all follow the same path. Additionally, errors
+        now generate stack traces. Shader compilation errors are now logged as well.
+
+        * dom/Document.h:
+        * dom/Document.cpp:
+        (WebCore::Document::addConsoleMessage):
+        * dom/ScriptExecutionContext.h:
+        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
+        * page/PageConsoleClient.h:
+        * page/PageConsoleClient.cpp:
+        (WebCore::PageConsoleClient::addMessage):
+        * workers/WorkerGlobalScope.h:
+        Add new path for logging to the console that accepts a ConsoleMessage.
+
 2017-06-20  Saam Barati  <sbarati@apple.com>
 
         Unreviewed. Try to fix the build after r218594.
index f63e37f..9a09879 100644 (file)
 #include "XPathNSResolver.h"
 #include "XPathResult.h"
 #include <ctime>
+#include <inspector/ConsoleMessage.h>
 #include <inspector/ScriptCallStack.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/NeverDestroyed.h>
@@ -5545,6 +5546,17 @@ void Document::parseDNSPrefetchControlHeader(const String& dnsPrefetchControl)
     m_haveExplicitlyDisabledDNSPrefetch = true;
 }
 
+void Document::addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&& consoleMessage)
+{
+    if (!isContextThread()) {
+        postTask(AddConsoleMessageTask(WTFMove(consoleMessage)));
+        return;
+    }
+
+    if (Page* page = this->page())
+        page->console().addMessage(WTFMove(consoleMessage));
+}
+
 void Document::addConsoleMessage(MessageSource source, MessageLevel level, const String& message, unsigned long requestIdentifier)
 {
     if (!isContextThread()) {
index 55c06c5..fea4aad 100644 (file)
@@ -1259,6 +1259,10 @@ public:
     void addDisabledFieldsetElement() { m_disabledFieldsetElementsCount++; }
     void removeDisabledFieldsetElement() { ASSERT(m_disabledFieldsetElementsCount); m_disabledFieldsetElementsCount--; }
 
+    WEBCORE_EXPORT void addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&&) final;
+
+    // The following addConsoleMessage function is deprecated.
+    // Callers should try to create the ConsoleMessage themselves.
     WEBCORE_EXPORT void addConsoleMessage(MessageSource, MessageLevel, const String& message, unsigned long requestIdentifier = 0) final;
 
     SecurityOrigin& securityOrigin() const { return *SecurityContext::securityOrigin(); }
@@ -1406,6 +1410,8 @@ private:
     void refScriptExecutionContext() final { ref(); }
     void derefScriptExecutionContext() final { deref(); }
 
+    // The following addMessage function is deprecated.
+    // Callers should try to create the ConsoleMessage themselves.
     void addMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&&, JSC::ExecState* = nullptr, unsigned long requestIdentifier = 0) final;
 
     Seconds minimumDOMTimerInterval() const final;
index b5f744e..d629c3d 100644 (file)
@@ -45,6 +45,7 @@ template<typename> class Strong;
 }
 
 namespace Inspector {
+class ConsoleMessage;
 class ScriptCallStack;
 }
 
@@ -97,6 +98,10 @@ public:
     void reportException(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, JSC::Exception*, RefPtr<Inspector::ScriptCallStack>&&, CachedScript* = nullptr);
     void reportUnhandledPromiseRejection(JSC::ExecState&, JSC::JSPromise&, RefPtr<Inspector::ScriptCallStack>&&);
 
+    virtual void addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&&) = 0;
+
+    // The following addConsoleMessage functions are deprecated.
+    // Callers should try to create the ConsoleMessage themselves.
     void addConsoleMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, JSC::ExecState* = nullptr, unsigned long requestIdentifier = 0);
     virtual void addConsoleMessage(MessageSource, MessageLevel, const String& message, unsigned long requestIdentifier = 0) = 0;
 
@@ -223,6 +228,13 @@ public:
 protected:
     class AddConsoleMessageTask : public Task {
     public:
+        AddConsoleMessageTask(std::unique_ptr<Inspector::ConsoleMessage>&& consoleMessage)
+            : Task([&consoleMessage](ScriptExecutionContext& context) {
+                context.addConsoleMessage(WTFMove(consoleMessage));
+            })
+        {
+        }
+
         AddConsoleMessageTask(MessageSource source, MessageLevel level, const String& message)
             : Task([source, level, message = message.isolatedCopy()](ScriptExecutionContext& context) {
                 context.addConsoleMessage(source, level, message);
@@ -236,6 +248,8 @@ protected:
     bool hasPendingActivity() const;
 
 private:
+    // The following addMessage function is deprecated.
+    // Callers should try to create the ConsoleMessage themselves.
     virtual void addMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&&, JSC::ExecState* = nullptr, unsigned long requestIdentifier = 0) = 0;
     virtual void logExceptionToConsole(const String& errorMessage, const String& sourceURL, int lineNumber, int columnNumber, RefPtr<Inspector::ScriptCallStack>&&) = 0;
     bool dispatchErrorEvent(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, JSC::Exception*, CachedScript*);
index a2b03af..f785c8c 100644 (file)
@@ -52,7 +52,9 @@
 #include "HTMLVideoElement.h"
 #include "ImageBuffer.h"
 #include "ImageData.h"
+#include "InspectorInstrumentation.h"
 #include "IntSize.h"
+#include "JSMainThreadExecState.h"
 #include "Logging.h"
 #include "MainFrame.h"
 #include "NotImplemented.h"
@@ -89,7 +91,9 @@
 #include "WebGLShaderPrecisionFormat.h"
 #include "WebGLTexture.h"
 #include "WebGLUniformLocation.h"
-
+#include <inspector/ConsoleMessage.h>
+#include <inspector/ScriptCallStack.h>
+#include <inspector/ScriptCallStackFactory.h>
 #include <runtime/JSCInlines.h>
 #include <runtime/TypedArrayInlines.h>
 #include <runtime/Uint32Array.h>
@@ -344,7 +348,7 @@ public:
     void onErrorMessage(const String& message, GC3Dint) override
     {
         if (m_context->m_synthesizedErrorsToConsole)
-            m_context->printGLErrorToConsole(message);
+            m_context->printToConsole(MessageLevel::Error, message);
     }
     virtual ~WebGLRenderingContextErrorMessageCallback() { }
 private:
@@ -1242,7 +1246,8 @@ GC3Denum WebGLRenderingContextBase::checkFramebufferStatus(GC3Denum target)
     const char* reason = "framebuffer incomplete";
     GC3Denum result = m_framebufferBinding->checkStatus(&reason);
     if (result != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
-        printGLWarningToConsole("checkFramebufferStatus", reason);
+        String str = "WebGL: checkFramebufferStatus:" + String(reason);
+        printToConsole(MessageLevel::Warning, str);
         return result;
     }
     result = m_context->checkFramebufferStatus(target);
@@ -1303,6 +1308,15 @@ void WebGLRenderingContextBase::compileShader(WebGLShader* shader)
     GC3Dint value;
     m_context->getShaderiv(objectOrZero(shader), GraphicsContext3D::COMPILE_STATUS, &value);
     shader->setValid(value);
+
+    if (m_synthesizedErrorsToConsole && !value) {
+        Ref<Inspector::ScriptCallStack> stackTrace = Inspector::createScriptCallStack(JSMainThreadExecState::currentState(), Inspector::ScriptCallStack::maxCallStackSizeToCapture);
+
+        Vector<String> errors;
+        getShaderInfoLog(shader).split("\n", errors);
+        for (String& error : errors)
+            canvas().document().addConsoleMessage(std::make_unique<Inspector::ConsoleMessage>(MessageSource::Rendering, MessageType::Log, MessageLevel::Error, "WebGL: " + error, stackTrace.copyRef()));
+    }
 }
 
 void WebGLRenderingContextBase::compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, ArrayBufferView& data)
@@ -4572,7 +4586,7 @@ void WebGLRenderingContextBase::forceLostContext(WebGLRenderingContextBase::Lost
 
 void WebGLRenderingContextBase::recycleContext()
 {
-    printWarningToConsole("There are too many active WebGL contexts on this page, the oldest context will be lost.");
+    printToConsole(MessageLevel::Error, "There are too many active WebGL contexts on this page, the oldest context will be lost.");
     // Using SyntheticLostContext means the developer won't be able to force the restoration
     // of the context by calling preventDefault() in a "webglcontextlost" event handler.
     forceLostContext(SyntheticLostContext);
@@ -4829,7 +4843,7 @@ bool WebGLRenderingContextBase::checkTextureCompleteness(const char* functionNam
             String msg(String("texture bound to texture unit ") + String::number(badTexture)
                 + " is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete',"
                 + " or it is a float/half-float type with linear filtering and without the relevant float/half-float linear extension enabled.");
-            printGLWarningToConsole(functionName, msg.utf8().data());
+            printToConsole(MessageLevel::Error, "WebGL: " + String(functionName) + ": " + msg);
             tex2D = m_blackTexture2D.get();
             texCubeMap = m_blackTextureCubeMap.get();
         } else {
@@ -5200,21 +5214,25 @@ bool WebGLRenderingContextBase::validateStencilFunc(const char* functionName, GC
     }
 }
 
-void WebGLRenderingContextBase::printGLErrorToConsole(const String& message)
+void WebGLRenderingContextBase::printToConsole(MessageLevel level, const String& message)
 {
-    if (!m_numGLErrorsToConsoleAllowed)
+    if (!m_synthesizedErrorsToConsole || !m_numGLErrorsToConsoleAllowed)
         return;
 
-    --m_numGLErrorsToConsoleAllowed;
-    printWarningToConsole(message);
+    std::unique_ptr<Inspector::ConsoleMessage> consoleMessage;
 
-    if (!m_numGLErrorsToConsoleAllowed)
-        printWarningToConsole("WebGL: too many errors, no more errors will be reported to the console for this context.");
-}
+    // Error messages can occur during function calls, so show stack traces for them.
+    if (level == MessageLevel::Error) {
+        Ref<Inspector::ScriptCallStack> stackTrace = Inspector::createScriptCallStack(JSMainThreadExecState::currentState(), Inspector::ScriptCallStack::maxCallStackSizeToCapture);
+        consoleMessage = std::make_unique<Inspector::ConsoleMessage>(MessageSource::Rendering, MessageType::Log, level, message, WTFMove(stackTrace));
+    } else
+        consoleMessage = std::make_unique<Inspector::ConsoleMessage>(MessageSource::Rendering, MessageType::Log, level, message);
 
-void WebGLRenderingContextBase::printWarningToConsole(const String& message)
-{
-    canvas().document().addConsoleMessage(MessageSource::Rendering, MessageLevel::Warning, message);
+    canvas().document().addConsoleMessage(WTFMove(consoleMessage));
+
+    --m_numGLErrorsToConsoleAllowed;
+    if (!m_numGLErrorsToConsoleAllowed)
+        printToConsole(MessageLevel::Warning, "WebGL: too many errors, no more errors will be reported to the console for this context.");
 }
 
 bool WebGLRenderingContextBase::validateBlendFuncFactors(const char* functionName, GC3Denum src, GC3Denum dst)
@@ -5595,7 +5613,7 @@ void WebGLRenderingContextBase::maybeRestoreContext()
     case Extensions3D::GUILTY_CONTEXT_RESET_ARB:
         // The rendering context is not restored if this context was
         // guilty of causing the graphics reset.
-        printWarningToConsole("WARNING: WebGL content on the page caused the graphics card to reset; not restoring the context");
+        printToConsole(MessageLevel::Warning, "WARNING: WebGL content on the page caused the graphics card to reset; not restoring the context");
         return;
     case Extensions3D::INNOCENT_CONTEXT_RESET_ARB:
         // Always allow the context to be restored.
@@ -5606,7 +5624,7 @@ void WebGLRenderingContextBase::maybeRestoreContext()
         // reset and ask them whether they want to continue running
         // the content. Only if they say "yes" should we start
         // attempting to restore the context.
-        printWarningToConsole("WARNING: WebGL content on the page might have caused the graphics card to reset");
+        printToConsole(MessageLevel::Warning, "WARNING: WebGL content on the page might have caused the graphics card to reset");
         break;
     }
 
@@ -5728,21 +5746,12 @@ namespace {
 void WebGLRenderingContextBase::synthesizeGLError(GC3Denum error, const char* functionName, const char* description, ConsoleDisplayPreference display)
 {
     if (m_synthesizedErrorsToConsole && display == DisplayInConsole) {
-      String str = String("WebGL: ") + GetErrorString(error) +  ": " + String(functionName) + ": " + String(description);
-      printGLErrorToConsole(str);
+        String str = "WebGL: " + GetErrorString(error) +  ": " + String(functionName) + ": " + String(description);
+        printToConsole(MessageLevel::Error, str);
     }
     m_context->synthesizeGLError(error);
 }
 
-
-void WebGLRenderingContextBase::printGLWarningToConsole(const char* functionName, const char* description)
-{
-    if (m_synthesizedErrorsToConsole) {
-        String str = String("WebGL: ") + String(functionName) + ": " + String(description);
-        printGLErrorToConsole(str);
-    }
-}
-
 void WebGLRenderingContextBase::applyStencilTest()
 {
     bool haveStencilBuffer = false;
index 3e3ef9f..7ef9de9 100644 (file)
@@ -743,13 +743,8 @@ protected:
     // Helper function for texParameterf and texParameteri.
     void texParameter(GC3Denum target, GC3Denum pname, GC3Dfloat parami, GC3Dint paramf, bool isFloat);
 
-    // Helper function to print GL errors to console.
-    void printGLErrorToConsole(const String&);
-    void printGLWarningToConsole(const char* function, const char* reason);
-
-    // Helper function to print warnings to console. Currently
-    // used only to warn about use of obsolete functions.
-    void printWarningToConsole(const String&);
+    // Helper function to print errors and warnings to console.
+    void printToConsole(MessageLevel, const String&);
 
     // Helper function to validate input parameters for framebuffer functions.
     // Generate GL error if parameters are illegal.
index 2093e73..71f4142 100644 (file)
@@ -105,6 +105,18 @@ static void getParserLocationForConsoleMessage(Document* document, String& url,
     column = position.m_column.oneBasedInt();
 }
 
+void PageConsoleClient::addMessage(std::unique_ptr<Inspector::ConsoleMessage>&& consoleMessage)
+{
+    if (consoleMessage->source() != MessageSource::CSS && !m_page.usesEphemeralSession()) {
+        m_page.chrome().client().addMessageToConsole(consoleMessage->source(), consoleMessage->level(), consoleMessage->message(), consoleMessage->line(), consoleMessage->column(), consoleMessage->url());
+
+        if (m_page.settings().logsPageMessagesToSystemConsoleEnabled() || shouldPrintExceptions())
+            ConsoleClient::printConsoleMessage(MessageSource::ConsoleAPI, MessageType::Log, consoleMessage->level(), consoleMessage->message(), consoleMessage->url(), consoleMessage->line(), consoleMessage->column());
+    }
+
+    InspectorInstrumentation::addMessageToConsole(m_page, WTFMove(consoleMessage));
+}
+
 void PageConsoleClient::addMessage(MessageSource source, MessageLevel level, const String& message, unsigned long requestIdentifier, Document* document)
 {
     String url;
@@ -132,24 +144,7 @@ void PageConsoleClient::addMessage(MessageSource source, MessageLevel level, con
     else
         message = std::make_unique<Inspector::ConsoleMessage>(source, MessageType::Log, level, messageText, suggestedURL, suggestedLineNumber, suggestedColumnNumber, state, requestIdentifier);
 
-    String url = message->url();
-    unsigned lineNumber = message->line();
-    unsigned columnNumber = message->column();
-
-    InspectorInstrumentation::addMessageToConsole(m_page, WTFMove(message));
-
-    if (source == MessageSource::CSS)
-        return;
-
-    if (m_page.usesEphemeralSession())
-        return;
-
-    m_page.chrome().client().addMessageToConsole(source, level, messageText, lineNumber, columnNumber, url);
-
-    if (!m_page.settings().logsPageMessagesToSystemConsoleEnabled() && !shouldPrintExceptions())
-        return;
-
-    ConsoleClient::printConsoleMessage(MessageSource::ConsoleAPI, MessageType::Log, level, messageText, url, lineNumber, columnNumber);
+    addMessage(WTFMove(message));
 }
 
 
index 5e44f28..1d44e59 100644 (file)
 #include <runtime/ConsoleClient.h>
 #include <wtf/Forward.h>
 
+namespace Inspector {
+class ConsoleMessage;
+}
+
 namespace JSC {
 class ExecState;
 }
@@ -53,6 +57,10 @@ public:
     static void mute();
     static void unmute();
 
+    void addMessage(std::unique_ptr<Inspector::ConsoleMessage>&&);
+
+    // The following addMessage function are deprecated.
+    // Callers should try to create the ConsoleMessage themselves.
     void addMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&& = nullptr, JSC::ExecState* = nullptr, unsigned long requestIdentifier = 0);
     void addMessage(MessageSource, MessageLevel, const String& message, Ref<Inspector::ScriptCallStack>&&);
     void addMessage(MessageSource, MessageLevel, const String& message, unsigned long requestIdentifier = 0, Document* = nullptr);
index 92e7e26..595bad3 100644 (file)
@@ -99,7 +99,7 @@ public:
 
     bool isClosing() { return m_closing; }
 
-    void addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&&);
+    void addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&&) final;
 
     Crypto& crypto();
 
@@ -122,6 +122,9 @@ private:
     void derefEventTarget() final { deref(); }
 
     void logExceptionToConsole(const String& errorMessage, const String& sourceURL, int lineNumber, int columnNumber, RefPtr<Inspector::ScriptCallStack>&&) final;
+
+    // The following addMessage and addConsoleMessage functions are deprecated.
+    // Callers should try to create the ConsoleMessage themselves.
     void addMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&&, JSC::ExecState*, unsigned long requestIdentifier) final;
     void addConsoleMessage(MessageSource, MessageLevel, const String& message, unsigned long requestIdentifier) final;