Add Plumming to get graphics error messages to JS Console
https://bugs.webkit.org/show_bug.cgi?id=77238
Source/WebCore:
Patch by Gregg Tavares <gman@chromium.org> on 2012-01-30
Reviewed by Kenneth Russell.
No new tests. No change in behavior.
* html/canvas/WebGLRenderingContext.cpp:
(WebGLRenderingContextErrorMessageCallback):
(WebCore::WebGLRenderingContextErrorMessageCallback::WebGLRenderingContextErrorMessageCallback):
(WebCore::WebGLRenderingContextErrorMessageCallback::onErrorMessage):
(WebCore::WebGLRenderingContextErrorMessageCallback::~WebGLRenderingContextErrorMessageCallback):
(WebCore):
(WebCore::WebGLRenderingContext::create):
(WebCore::WebGLRenderingContext::initializeNewContext):
(WebCore::WebGLRenderingContext::~WebGLRenderingContext):
* html/canvas/WebGLRenderingContext.h:
(WebGLRenderingContext):
* platform/graphics/GraphicsContext3D.h:
(ErrorMessageCallback):
(WebCore::GraphicsContext3D::ErrorMessageCallback::~ErrorMessageCallback):
(GraphicsContext3D):
* platform/graphics/cairo/GraphicsContext3DCairo.cpp:
(WebCore::GraphicsContext3D::setErrorMessageCallback):
(WebCore):
* platform/graphics/efl/GraphicsContext3DEfl.cpp:
(WebCore::GraphicsContext3D::setErrorMessageCallback):
(WebCore):
* platform/graphics/qt/GraphicsContext3DQt.cpp:
(WebCore::GraphicsContext3D::setErrorMessageCallback):
(WebCore):
Source/WebKit/chromium:
Patch by Gregg Tavares <gman@google.com> on 2012-01-30
Reviewed by Kenneth Russell.
* public/platform/WebGraphicsContext3D.h:
(WebGraphicsErrorMessageCallback):
(WebKit::WebGraphicsContext3D::WebGraphicsErrorMessageCallback::~WebGraphicsErrorMessageCallback):
(WebGraphicsContext3D):
(WebKit::WebGraphicsContext3D::setErrorMessageCallback):
* src/GraphicsContext3DChromium.cpp:
(WebCore::GraphicsContext3D::~GraphicsContext3D):
(WebCore):
(GraphicsErrorMessageCallbackAdapter):
(WebCore::GraphicsErrorMessageCallbackAdapter::~GraphicsErrorMessageCallbackAdapter):
(WebCore::GraphicsErrorMessageCallbackAdapter::GraphicsErrorMessageCallbackAdapter):
(WebCore::GraphicsErrorMessageCallbackAdapter::onErrorMessage):
(WebCore::GraphicsErrorMessageCallbackAdapter::create):
(WebCore::GraphicsContext3DPrivate::setErrorMessageCallback):
* src/GraphicsContext3DPrivate.h:
(WebCore):
():
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@106320 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 2d6fed6..5f8d663 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,37 @@
+2012-01-30 Gregg Tavares <gman@chromium.org>
+
+ Add Plumming to get graphics error messages to JS Console
+ https://bugs.webkit.org/show_bug.cgi?id=77238
+
+ Reviewed by Kenneth Russell.
+
+ No new tests. No change in behavior.
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebGLRenderingContextErrorMessageCallback):
+ (WebCore::WebGLRenderingContextErrorMessageCallback::WebGLRenderingContextErrorMessageCallback):
+ (WebCore::WebGLRenderingContextErrorMessageCallback::onErrorMessage):
+ (WebCore::WebGLRenderingContextErrorMessageCallback::~WebGLRenderingContextErrorMessageCallback):
+ (WebCore):
+ (WebCore::WebGLRenderingContext::create):
+ (WebCore::WebGLRenderingContext::initializeNewContext):
+ (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
+ * html/canvas/WebGLRenderingContext.h:
+ (WebGLRenderingContext):
+ * platform/graphics/GraphicsContext3D.h:
+ (ErrorMessageCallback):
+ (WebCore::GraphicsContext3D::ErrorMessageCallback::~ErrorMessageCallback):
+ (GraphicsContext3D):
+ * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
+ (WebCore::GraphicsContext3D::setErrorMessageCallback):
+ (WebCore):
+ * platform/graphics/efl/GraphicsContext3DEfl.cpp:
+ (WebCore::GraphicsContext3D::setErrorMessageCallback):
+ (WebCore):
+ * platform/graphics/qt/GraphicsContext3DQt.cpp:
+ (WebCore::GraphicsContext3D::setErrorMessageCallback):
+ (WebCore):
+
2012-01-30 Anders Carlsson <andersca@apple.com>
Simplify RenderLayerCompositor::frameViewDidScroll
diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.cpp b/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
index 045667bc..9176a2d 100644
--- a/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/Source/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -374,6 +374,15 @@
WebGLRenderingContext* m_context;
};
+class WebGLRenderingContextErrorMessageCallback : public GraphicsContext3D::ErrorMessageCallback {
+public:
+ explicit WebGLRenderingContextErrorMessageCallback(WebGLRenderingContext* cb) : m_context(cb) { }
+ virtual void onErrorMessage(const String& message, GC3Dint) { m_context->printWarningToConsole(message); }
+ virtual ~WebGLRenderingContextErrorMessageCallback() { }
+private:
+ WebGLRenderingContext* m_context;
+};
+
PassOwnPtr<WebGLRenderingContext> WebGLRenderingContext::create(HTMLCanvasElement* canvas, WebGLContextAttributes* attrs)
{
HostWindow* hostWindow = canvas->document()->view()->root()->hostWindow();
@@ -500,6 +509,7 @@
m_context->viewport(0, 0, canvas()->width(), canvas()->height());
m_context->setContextLostCallback(adoptPtr(new WebGLRenderingContextLostCallback(this)));
+ m_context->setErrorMessageCallback(adoptPtr(new WebGLRenderingContextErrorMessageCallback(this)));
}
void WebGLRenderingContext::setupFlags()
@@ -548,6 +558,7 @@
detachAndRemoveAllObjects();
m_context->setContextLostCallback(nullptr);
+ m_context->setErrorMessageCallback(nullptr);
m_contextGroup->removeContext(this);
}
diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.h b/Source/WebCore/html/canvas/WebGLRenderingContext.h
index 5550360..18291fd 100644
--- a/Source/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/Source/WebCore/html/canvas/WebGLRenderingContext.h
@@ -322,6 +322,7 @@
friend class OESVertexArrayObject;
friend class WebGLDebugShaders;
friend class WebGLCompressedTextures;
+ friend class WebGLRenderingContextErrorMessageCallback;
WebGLRenderingContext(HTMLCanvasElement*, PassRefPtr<GraphicsContext3D>, GraphicsContext3D::Attributes);
void initializeNewContext();
diff --git a/Source/WebCore/platform/graphics/GraphicsContext3D.h b/Source/WebCore/platform/graphics/GraphicsContext3D.h
index dfebbba..34c549a 100644
--- a/Source/WebCore/platform/graphics/GraphicsContext3D.h
+++ b/Source/WebCore/platform/graphics/GraphicsContext3D.h
@@ -454,7 +454,14 @@
virtual ~ContextLostCallback() {}
};
+ class ErrorMessageCallback {
+ public:
+ virtual void onErrorMessage(const String& message, GC3Dint id) = 0;
+ virtual ~ErrorMessageCallback() { }
+ };
+
void setContextLostCallback(PassOwnPtr<ContextLostCallback>);
+ void setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>);
static PassRefPtr<GraphicsContext3D> create(Attributes, HostWindow*, RenderStyle = RenderOffscreen);
~GraphicsContext3D();
diff --git a/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp b/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp
index b5e1231..c85aab4 100644
--- a/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp
+++ b/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp
@@ -115,6 +115,10 @@
{
}
+void GraphicsContext3D::setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>)
+{
+}
+
#if USE(ACCELERATED_COMPOSITING)
PlatformLayer* GraphicsContext3D::platformLayer() const
{
diff --git a/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp b/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp
index d45235e..e3e82f9 100644
--- a/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp
+++ b/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp
@@ -836,6 +836,11 @@
notImplemented();
}
+void GraphicsContext3D::setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>)
+{
+ notImplemented();
+}
+
bool GraphicsContext3D::getImageData(Image* image, GC3Denum format, GC3Denum type, bool premultiplyAlpha,
bool ignoreGammaAndColorProfile, Vector<uint8_t>& outputVector)
{
diff --git a/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm b/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
index e3c371a..a83e0de 100644
--- a/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
+++ b/Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
@@ -278,6 +278,10 @@
{
}
+void GraphicsContext3D::setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>)
+{
+}
+
}
#endif // ENABLE(WEBGL)
diff --git a/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
index 9173a5d..495bcad 100644
--- a/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
+++ b/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
@@ -1639,6 +1639,10 @@
{
}
+void GraphicsContext3D::setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>)
+{
+}
+
}
#endif // ENABLE(WEBGL)
diff --git a/Source/WebKit/chromium/ChangeLog b/Source/WebKit/chromium/ChangeLog
index cf4102e..8d82bfb 100644
--- a/Source/WebKit/chromium/ChangeLog
+++ b/Source/WebKit/chromium/ChangeLog
@@ -1,3 +1,28 @@
+2012-01-30 Gregg Tavares <gman@google.com>
+
+ Add Plumming to get graphics error messages to JS Console
+ https://bugs.webkit.org/show_bug.cgi?id=77238
+
+ Reviewed by Kenneth Russell.
+
+ * public/platform/WebGraphicsContext3D.h:
+ (WebGraphicsErrorMessageCallback):
+ (WebKit::WebGraphicsContext3D::WebGraphicsErrorMessageCallback::~WebGraphicsErrorMessageCallback):
+ (WebGraphicsContext3D):
+ (WebKit::WebGraphicsContext3D::setErrorMessageCallback):
+ * src/GraphicsContext3DChromium.cpp:
+ (WebCore::GraphicsContext3D::~GraphicsContext3D):
+ (WebCore):
+ (GraphicsErrorMessageCallbackAdapter):
+ (WebCore::GraphicsErrorMessageCallbackAdapter::~GraphicsErrorMessageCallbackAdapter):
+ (WebCore::GraphicsErrorMessageCallbackAdapter::GraphicsErrorMessageCallbackAdapter):
+ (WebCore::GraphicsErrorMessageCallbackAdapter::onErrorMessage):
+ (WebCore::GraphicsErrorMessageCallbackAdapter::create):
+ (WebCore::GraphicsContext3DPrivate::setErrorMessageCallback):
+ * src/GraphicsContext3DPrivate.h:
+ (WebCore):
+ ():
+
2012-01-30 Sheriff Bot <webkit.review.bot@gmail.com>
Unreviewed, rolling out r106259.
diff --git a/Source/WebKit/chromium/public/platform/WebGraphicsContext3D.h b/Source/WebKit/chromium/public/platform/WebGraphicsContext3D.h
index 3811436..03789d0 100644
--- a/Source/WebKit/chromium/public/platform/WebGraphicsContext3D.h
+++ b/Source/WebKit/chromium/public/platform/WebGraphicsContext3D.h
@@ -118,6 +118,12 @@
virtual ~WebGraphicsContextLostCallback() { }
};
+ class WebGraphicsErrorMessageCallback {
+ public:
+ virtual void onErrorMessage(const WebString&, WGC3Dint) = 0;
+ virtual ~WebGraphicsErrorMessageCallback() { }
+ };
+
class WebGraphicsSwapBuffersCompleteCallbackCHROMIUM {
public:
virtual void onSwapBuffersComplete() = 0;
@@ -369,6 +375,7 @@
virtual void deleteTexture(WebGLId) = 0;
virtual void setContextLostCallback(WebGraphicsContextLostCallback* callback) {}
+ virtual void setErrorMessageCallback(WebGraphicsErrorMessageCallback* callback) { }
// GL_ARB_robustness
//
// This entry point must provide slightly different semantics than
diff --git a/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp b/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp
index 56a89e7..5315d85 100644
--- a/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp
+++ b/Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp
@@ -1032,6 +1032,7 @@
GraphicsContext3D::~GraphicsContext3D()
{
m_private->setContextLostCallback(nullptr);
+ m_private->setErrorMessageCallback(nullptr);
m_private->setSwapBuffersCompleteCallbackCHROMIUM(nullptr);
}
@@ -1268,6 +1269,7 @@
DELEGATE_TO_INTERNAL_R(getExtensions, Extensions3D*)
DELEGATE_TO_INTERNAL_1(setContextLostCallback, PassOwnPtr<GraphicsContext3D::ContextLostCallback>)
+DELEGATE_TO_INTERNAL_1(setErrorMessageCallback, PassOwnPtr<GraphicsContext3D::ErrorMessageCallback>)
class GraphicsContextLostCallbackAdapter : public WebKit::WebGraphicsContext3D::WebGraphicsContextLostCallback {
public:
@@ -1296,6 +1298,33 @@
m_impl->setContextLostCallback(m_contextLostCallbackAdapter.get());
}
+class GraphicsErrorMessageCallbackAdapter : public WebKit::WebGraphicsContext3D::WebGraphicsErrorMessageCallback {
+public:
+ virtual void onErrorMessage(const WebKit::WebString&, WebKit::WGC3Dint);
+ static PassOwnPtr<GraphicsErrorMessageCallbackAdapter> create(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback>);
+ virtual ~GraphicsErrorMessageCallbackAdapter() { }
+private:
+ GraphicsErrorMessageCallbackAdapter(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback> cb) : m_errorMessageCallback(cb) { }
+ OwnPtr<GraphicsContext3D::ErrorMessageCallback> m_errorMessageCallback;
+};
+
+void GraphicsErrorMessageCallbackAdapter::onErrorMessage(const WebKit::WebString& message, WebKit::WGC3Dint id)
+{
+ if (m_errorMessageCallback)
+ m_errorMessageCallback->onErrorMessage(message, id);
+}
+
+PassOwnPtr<GraphicsErrorMessageCallbackAdapter> GraphicsErrorMessageCallbackAdapter::create(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback> cb)
+{
+ return adoptPtr(cb.get() ? new GraphicsErrorMessageCallbackAdapter(cb) : 0);
+}
+
+void GraphicsContext3DPrivate::setErrorMessageCallback(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback> cb)
+{
+ m_errorMessageCallbackAdapter = GraphicsErrorMessageCallbackAdapter::create(cb);
+ m_impl->setErrorMessageCallback(m_errorMessageCallbackAdapter.get());
+}
+
bool GraphicsContext3D::isGLES2Compliant() const
{
return m_private->isGLES2Compliant();
diff --git a/Source/WebKit/chromium/src/GraphicsContext3DPrivate.h b/Source/WebKit/chromium/src/GraphicsContext3DPrivate.h
index 28079c3..f2d49a1 100644
--- a/Source/WebKit/chromium/src/GraphicsContext3DPrivate.h
+++ b/Source/WebKit/chromium/src/GraphicsContext3DPrivate.h
@@ -50,6 +50,7 @@
class Extensions3DChromium;
class GraphicsContextLostCallbackAdapter;
class GraphicsContext3DSwapBuffersCompleteCallbackAdapter;
+class GraphicsErrorMessageCallbackAdapter;
class GraphicsContext3DPrivate {
public:
@@ -273,6 +274,7 @@
void synthesizeGLError(GC3Denum error);
void setContextLostCallback(PassOwnPtr<GraphicsContext3D::ContextLostCallback>);
+ void setErrorMessageCallback(PassOwnPtr<GraphicsContext3D::ErrorMessageCallback>);
// Extensions3D support.
Extensions3D* getExtensions();
@@ -321,6 +323,7 @@
OwnPtr<WebKit::WebGraphicsContext3D> m_impl;
OwnPtr<Extensions3DChromium> m_extensions;
OwnPtr<GraphicsContextLostCallbackAdapter> m_contextLostCallbackAdapter;
+ OwnPtr<GraphicsErrorMessageCallbackAdapter> m_errorMessageCallbackAdapter;
OwnPtr<GraphicsContext3DSwapBuffersCompleteCallbackAdapter> m_swapBuffersCompleteCallbackAdapter;
WebKit::WebViewImpl* m_webViewImpl;
bool m_initializedAvailableExtensions;