From 3da7df93366b05bccbd319fd4232574722866b6c Mon Sep 17 00:00:00 2001
From: Andras Becsi <andras.becsi@theqtcompany.com>
Date: Thu, 30 Apr 2015 13:17:32 +0200
Subject: [PATCH] Prevent conflicting declaration errors of GL typedefs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Including gpu/command_buffer headers in Qt code pollute by
including ui/gl/gl_bindings.h which pulls in system GL headers.
This will cause conflicting declaration of typedefs when included
together with content/gpu and content/common/gpu headers which
pull in gles2_cmd_format.h that forward declares some GL types.

Although the gl_bindings.h header states in a comment that
it should only be included in source files, the inline
implementation of texture_manager.h and some other low-level
GL integration headers nonetheless require gl_bindings.h,
which unfortunately cascades through to our core layer and
may cause problems when Qt code is compiled.

Since getting rid of this include in Chromium's headers is not
feasible due to maintenance costs, making sure that in Qt code
gpu/command_buffer headers are included before content/gpu and
content/common/gpu headers and guarding forward declarations
in gpu/command_buffer/common/gles2_cmd_format.h should be
a sufficient workaround. We can however get rid of the polluting
includes in src/core/gl_surface_qt.cpp, which only requires
forward declarations.

This also includes a SHA1 update for the Chromium submodule.

Task-number: QTBUG-44240
Change-Id: I5813a3663d36e2b565e4fd7f429add7b6f8f8a69
Reviewed-by: Michael Brüning <michael.bruning@theqtcompany.com>
---
 src/3rdparty                     |  2 +-
 src/core/chromium_gpu_helper.cpp | 10 ++++++----
 src/core/gl_surface_qt.cpp       |  6 +++---
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/3rdparty b/src/3rdparty
index 6d7b9ab74..0decf9170 160000
--- a/src/3rdparty
+++ b/src/3rdparty
@@ -1 +1 @@
-Subproject commit 6d7b9ab74288eab0f846e5fa92854c9a49bee195
+Subproject commit 0decf91700ad48612b885a549e79bb6252196d4d
diff --git a/src/core/chromium_gpu_helper.cpp b/src/core/chromium_gpu_helper.cpp
index c7c97e60c..ef574eccd 100644
--- a/src/core/chromium_gpu_helper.cpp
+++ b/src/core/chromium_gpu_helper.cpp
@@ -40,13 +40,15 @@
 
 #include "chromium_gpu_helper.h"
 
-#include "content/common/gpu/gpu_channel_manager.h"
-#include "content/common/gpu/sync_point_manager.h"
-#include "content/gpu/gpu_child_thread.h"
+// Including gpu/command_buffer headers before content/gpu headers makes sure that
+// guards are defined to prevent duplicate definition errors with forward declared
+// GL typedefs cascading through content header includes.
 #include "gpu/command_buffer/service/mailbox_manager.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 
-#include <QtGlobal> // We need this for the Q_OS_QNX define.
+#include "content/common/gpu/gpu_channel_manager.h"
+#include "content/common/gpu/sync_point_manager.h"
+#include "content/gpu/gpu_child_thread.h"
 
 #ifdef Q_OS_QNX
 #include "content/common/gpu/stream_texture_qnx.h"
diff --git a/src/core/gl_surface_qt.cpp b/src/core/gl_surface_qt.cpp
index 4fe2f2137..5a27aa98f 100644
--- a/src/core/gl_surface_qt.cpp
+++ b/src/core/gl_surface_qt.cpp
@@ -49,8 +49,6 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "content/common/gpu/image_transport_surface.h"
-#include "content/common/gpu/gpu_channel_manager.h"
-#include "content/common/gpu/gpu_command_buffer_stub.h"
 #include "ui/gl/egl_util.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_implementation.h"
@@ -544,7 +542,9 @@ GLSurface::CreateViewGLSurface(gfx::AcceleratedWidget window)
 }  // namespace gfx
 
 namespace content {
-scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateNativeSurface(GpuChannelManager* manager, GpuCommandBufferStub* stub, const gfx::GLSurfaceHandle& handle)
+class GpuCommandBufferStub;
+class GpuChannelManager;
+scoped_refptr<gfx::GLSurface> ImageTransportSurface::CreateNativeSurface(GpuChannelManager*, GpuCommandBufferStub*, const gfx::GLSurfaceHandle&)
 {
     QT_NOT_USED
     return scoped_refptr<gfx::GLSurface>();
-- 
GitLab