From 9d5c3ff62103708266d8bdc3a8fb02b07283d6b7 Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Thu, 27 Jun 2013 14:02:47 +0200 Subject: Add Mac support. Adding several patches to the repository that need to be applied to the chromium sources in order to allow building on Mac. Change-Id: Ie06250a828b3533e2f48563ce374e63fc25d16cf Reviewed-by: Andras Becsi --- build/gyp_qtwebengine | 10 + ...dd-support-for-libc-to-xcode_emulation.py.patch | 26 + patches/0001-Mac-Use-libc-instead-of-stdlibc.patch | 162 ++++ ...move-leftovers-from-WebKitSystemInterface.patch | 31 + ...does-not-support-incomplete-types-in-temp.patch | 879 +++++++++++++++++++++ patches/patch-chromium.sh | 13 +- 6 files changed, 1119 insertions(+), 2 deletions(-) create mode 100644 patches/0001-Add-support-for-libc-to-xcode_emulation.py.patch create mode 100644 patches/0001-Mac-Use-libc-instead-of-stdlibc.patch create mode 100644 patches/0001-Remove-leftovers-from-WebKitSystemInterface.patch create mode 100644 patches/0002-Clang-libc-does-not-support-incomplete-types-in-temp.patch diff --git a/build/gyp_qtwebengine b/build/gyp_qtwebengine index df5a5d18a..6c3f7c6aa 100755 --- a/build/gyp_qtwebengine +++ b/build/gyp_qtwebengine @@ -81,6 +81,12 @@ def get_output_dir(): if __name__ == '__main__': args = sys.argv[1:] + # On Mac we want to override CXX and CC that is provided with + # the Chromium GYP environment. + if sys.platform.startswith('darwin'): + os.environ['CXX'] = 'clang++' + os.environ['CC'] = 'clang' + gyp_helper.apply_chromium_gyp_env() # This could give false positives since it doesn't actually do real option @@ -96,6 +102,10 @@ if __name__ == '__main__': args.extend(['-I' + i for i in additional_include_files(args)]) + # On Mac we want to build in x64 mode. And we want to use libc++. + if sys.platform in ('darwin',): + args.extend(['-D', 'host_arch=x64', '-D', 'use_libcpp=1']) + # There shouldn't be a circular dependency relationship between .gyp files, # but in Chromium's .gyp files, on non-Mac platforms, circular relationships # currently exist. The check for circular dependencies is currently diff --git a/patches/0001-Add-support-for-libc-to-xcode_emulation.py.patch b/patches/0001-Add-support-for-libc-to-xcode_emulation.py.patch new file mode 100644 index 000000000..0baed04a2 --- /dev/null +++ b/patches/0001-Add-support-for-libc-to-xcode_emulation.py.patch @@ -0,0 +1,26 @@ +From ade7ffb418d848084cd35efdadfdc6524700115c Mon Sep 17 00:00:00 2001 +From: Zeno Albisser +Date: Thu, 27 Jun 2013 20:04:51 +0200 +Subject: [PATCH] Add support for libc++ to xcode_emulation.py + +--- + pylib/gyp/xcode_emulation.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/pylib/gyp/xcode_emulation.py b/pylib/gyp/xcode_emulation.py +index c6f018c..f118b94 100644 +--- a/pylib/gyp/xcode_emulation.py ++++ b/pylib/gyp/xcode_emulation.py +@@ -541,6 +541,9 @@ class XcodeSettings(object): + for ldflag in self._Settings().get('OTHER_LDFLAGS', []): + ldflags.append(self._MapLinkerFlagFilename(ldflag, gyp_to_build_path)) + ++ if self._Test('USE_LIBCPP', 'YES', default='NO'): ++ ldflags.append('-stdlib=libc++') ++ + if self._Test('DEAD_CODE_STRIPPING', 'YES', default='NO'): + ldflags.append('-Wl,-dead_strip') + +-- +1.8.0.1 + diff --git a/patches/0001-Mac-Use-libc-instead-of-stdlibc.patch b/patches/0001-Mac-Use-libc-instead-of-stdlibc.patch new file mode 100644 index 000000000..134568a6b --- /dev/null +++ b/patches/0001-Mac-Use-libc-instead-of-stdlibc.patch @@ -0,0 +1,162 @@ +From f5e04b997ca30f12555d6c28dd702108ebb8f6d3 Mon Sep 17 00:00:00 2001 +From: Zeno Albisser +Date: Thu, 27 Jun 2013 15:51:43 +0200 +Subject: [PATCH 1/2] Mac: Use libc++ instead of stdlibc++. + +- Add a missing include file to process_iterator_mac.cc. +- Disable Chromium clang plugins. +- Add a use_libcpp variable to common.gypi that can be used + to build with libc++ instead of libstdc++. + In this case several warnings also must be disabled, + And the mac deployment target must be bumped to 10.7. +- ext/hash_map and ext/hash_set are deprecated. + Use unordered containers as a replacement. +--- + base/process/process_iterator_mac.cc | 1 + + build/common.gypi | 30 +++++++++++++++++++++++++++--- + third_party/protobuf/config.h | 27 ++++++++++++++------------- + 3 files changed, 42 insertions(+), 16 deletions(-) + +diff --git a/base/process/process_iterator_mac.cc b/base/process/process_iterator_mac.cc +index 29daa2d..e35c2ae 100644 +--- a/base/process/process_iterator_mac.cc ++++ b/base/process/process_iterator_mac.cc +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + + #include "base/logging.h" + #include "base/strings/string_util.h" +diff --git a/build/common.gypi b/build/common.gypi +index 3fd1c77..0e57abb 100644 +--- a/build/common.gypi ++++ b/build/common.gypi +@@ -278,7 +278,7 @@ + # Run tools/clang/scripts/update.sh to make sure they are compiled. + # This causes 'clang_chrome_plugins_flags' to be set. + # Has no effect if 'clang' is not set as well. +- 'clang_use_chrome_plugins%': 1, ++ 'clang_use_chrome_plugins%': 0, + + # Enable building with ASAN (Clang's -fsanitize=address option). + # -fsanitize=address only works with clang, but asan=1 implies clang=1 +@@ -1100,6 +1100,9 @@ + # MDNS is disabled by default. + 'enable_mdns%' : 0, + ++ # Compile with libc++ instead of libstdc++. ++ 'use_libcpp%' : 0, ++ + 'conditions': [ + # The version of GCC in use, set later in platforms that use GCC and have + # not explicitly chosen to build with clang. Currently, this means all +@@ -1358,10 +1361,10 @@ + # someplace that Xcode doesn't know about, set mac_sdk_path to the + # path to the SDK; when set to a non-empty string, SDK detection + # based on mac_sdk_min will be bypassed entirely. +- 'mac_sdk_min%': '10.6', ++ 'mac_sdk_min%': '10.7', + 'mac_sdk_path%': '', + +- 'mac_deployment_target%': '10.6', ++ 'mac_deployment_target%': '10.7', + }, + + 'mac_sdk_min': '<(mac_sdk_min)', +@@ -1371,6 +1374,7 @@ + # Compile in Breakpad support by default so that it can be + # tested, even if it is not enabled by default at runtime. + 'mac_breakpad_compiled_in%': 1, ++ + 'conditions': [ + # mac_product_name is set to the name of the .app bundle as it should + # appear on disk. This duplicates data from +@@ -1922,6 +1926,16 @@ + ['use_x11==1', { + 'defines': ['USE_X11=1'], + }], ++ ['use_libcpp==1', { ++ 'defines': ['USE_UNORDERED_CONTAINERS=1'], ++ 'cflags_cc': [ ++ '-Wno-deprecated-declarations', ++ '-Wno-newline-eof', ++ '-Wno-unused-value', ++ '-Wno-unused-variable', ++ '-stdlib=libc++' ++ ], ++ }], + ['enable_one_click_signin==1', { + 'defines': ['ENABLE_ONE_CLICK_SIGNIN'], + }], +@@ -3828,6 +3842,16 @@ + '$(inherited)', '-std=gnu++11', + ], + }], ++ ['use_libcpp==1', { ++ 'OTHER_CPLUSPLUSFLAGS': ['-stdlib=libc++'], ++ 'USE_LIBCPP': 'YES', ++ 'WARNING_CFLAGS': [ ++ '-Wno-deprecated-declarations', ++ '-Wno-newline-eof', ++ '-Wno-unused-value', ++ '-Wno-unused-variable', ++ ], ++ }], + ['clang==1 and clang_use_chrome_plugins==1', { + 'OTHER_CFLAGS': [ + '<@(clang_chrome_plugins_flags)', +diff --git a/third_party/protobuf/config.h b/third_party/protobuf/config.h +index dcc0041..affcf55 100644 +--- a/third_party/protobuf/config.h ++++ b/third_party/protobuf/config.h +@@ -1,31 +1,32 @@ + /* config.h. Generated from config.h.in by configure. */ + /* config.h.in. Generated from configure.ac by autoheader. */ + +-/* the name of */ +-#define HASH_MAP_CLASS hash_map ++#if defined(USE_UNORDERED_CONTAINERS) ++ ++#define HASH_MAP_H ++#define HASH_SET_H ++#define HASH_NAMESPACE std ++#define HASH_MAP_CLASS unordered_map ++#define HASH_SET_CLASS unordered_set + +-/* the location of */ +-#if defined(USE_STLPORT) +-#define HASH_MAP_H + #else +-#define HASH_MAP_H +-#endif + +-/* the namespace of hash_map/hash_set */ + #if defined(USE_STLPORT) ++#define HASH_MAP_H ++#define HASH_SET_H + #define HASH_NAMESPACE std + #else ++#define HASH_MAP_H ++#define HASH_SET_H + #define HASH_NAMESPACE __gnu_cxx + #endif + + /* the name of */ ++#define HASH_MAP_CLASS hash_map ++ ++/* the name of */ + #define HASH_SET_CLASS hash_set + +-/* the location of */ +-#if defined(USE_STLPORT) +-#define HASH_SET_H +-#else +-#define HASH_SET_H + #endif + + /* Define to 1 if you have the header file. */ +-- +1.8.0.1 + diff --git a/patches/0001-Remove-leftovers-from-WebKitSystemInterface.patch b/patches/0001-Remove-leftovers-from-WebKitSystemInterface.patch new file mode 100644 index 000000000..a91cd7dd0 --- /dev/null +++ b/patches/0001-Remove-leftovers-from-WebKitSystemInterface.patch @@ -0,0 +1,31 @@ +From 7a3ceac028997022cb2c6b09fd611ace6d84d932 Mon Sep 17 00:00:00 2001 +From: Zeno Albisser +Date: Thu, 27 Jun 2013 19:21:34 +0200 +Subject: [PATCH] Remove leftovers from WebKitSystemInterface + +--- + Source/core/platform/graphics/mac/ComplexTextControllerCoreText.mm | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/Source/core/platform/graphics/mac/ComplexTextControllerCoreText.mm b/Source/core/platform/graphics/mac/ComplexTextControllerCoreText.mm +index e5c514b..6bcdf0b 100644 +--- a/Source/core/platform/graphics/mac/ComplexTextControllerCoreText.mm ++++ b/Source/core/platform/graphics/mac/ComplexTextControllerCoreText.mm +@@ -223,14 +223,9 @@ void ComplexTextController::collectComplexTextRunsForCharacters(const UChar* cp, + static CFDictionaryRef ltrTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, ltrOptionValues, WTF_ARRAY_LENGTH(optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + static CFDictionaryRef rtlTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, rtlOptionValues, WTF_ARRAY_LENGTH(optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + +-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 +- ProviderInfo info = { cp, length, stringAttributes.get() }; +- RetainPtr typesetter(AdoptCF, WKCreateCTTypesetterWithUniCharProviderAndOptions(&provideStringAndAttributes, 0, &info, m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions)); +-#else + RetainPtr string(AdoptCF, CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, cp, length, kCFAllocatorNull)); + RetainPtr attributedString(AdoptCF, CFAttributedStringCreate(kCFAllocatorDefault, string.get(), stringAttributes.get())); + RetainPtr typesetter(AdoptCF, CTTypesetterCreateWithAttributedStringAndOptions(attributedString.get(), m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions)); +-#endif + + line.adoptCF(CTTypesetterCreateLine(typesetter.get(), CFRangeMake(0, 0))); + } else { +-- +1.8.0.1 + diff --git a/patches/0002-Clang-libc-does-not-support-incomplete-types-in-temp.patch b/patches/0002-Clang-libc-does-not-support-incomplete-types-in-temp.patch new file mode 100644 index 000000000..c0c405a73 --- /dev/null +++ b/patches/0002-Clang-libc-does-not-support-incomplete-types-in-temp.patch @@ -0,0 +1,879 @@ +From 9ebab30210abcb9af385d6a7bc2745ca4c790f0a Mon Sep 17 00:00:00 2001 +From: Zeno Albisser +Date: Thu, 27 Jun 2013 15:58:32 +0200 +Subject: [PATCH 2/2] Clang / libc++ does not support incomplete types in + templates. See: http://clang.llvm.org/compatibility.html#undep_incomplete + +Therefore forward declarations must be removed in several places: +- AudioBus::QueuedAudioBuffer +- base::Callback +- GURL +- HttpAuthCache::Entry +- ImageFamily::MapKey +- MediaStreamDispatcher::Request +- MediaStreamDispatcher::Stream +- MediaStreamDispatcherHost::StreamRequest +- MessagePortService::MessagePort +- MockCertVerifier::Rule +- PepperRendererInstanceData +- RuleBasedHostResolverProc::Rule +- WebURLError +- WebURLLoaderMockFactory::ResponseInfo +- WorkerDevToolsManager::InspectedWorker +- WorkerDevToolsManager::TerminatedInspectedWorker +--- + base/callback_forward.h | 9 +- + .../browser/devtools/worker_devtools_manager.cc | 24 ---- + content/browser/devtools/worker_devtools_manager.h | 26 +++- + .../in_process_webkit/indexed_db_dispatcher_host.h | 2 +- + .../media/media_stream_dispatcher_host.cc | 11 -- + .../media/media_stream_dispatcher_host.h | 12 +- + .../renderer_host/pepper/browser_ppapi_host_impl.h | 3 +- + .../browser/worker_host/message_port_service.cc | 15 --- + content/browser/worker_host/message_port_service.h | 16 ++- + content/common/gpu/gpu_messages.h | 4 +- + content/public/test/test_file_error_injector.h | 3 +- + content/renderer/media/media_stream_dispatcher.cc | 21 --- + content/renderer/media/media_stream_dispatcher.h | 22 +++- + gpu/config/dx_diag_node.cc | 4 + + gpu/config/dx_diag_node.h | 4 + + media/filters/ffmpeg_audio_decoder.cc | 6 - + media/filters/ffmpeg_audio_decoder.h | 7 +- + net/cert/mock_cert_verifier.cc | 19 --- + net/cert/mock_cert_verifier.h | 20 ++- + net/dns/mock_host_resolver.cc | 31 ----- + net/dns/mock_host_resolver.h | 32 ++++- + net/http/http_auth_cache.h | 144 ++++++++++----------- + ui/gfx/image/image_family.h | 23 ++-- + webkit/browser/dom_storage/dom_storage_namespace.h | 3 +- + webkit/support/weburl_loader_mock_factory.cc | 5 - + webkit/support/weburl_loader_mock_factory.h | 8 +- + 26 files changed, 229 insertions(+), 245 deletions(-) + +diff --git a/base/callback_forward.h b/base/callback_forward.h +index 7983248..8538bb2 100644 +--- a/base/callback_forward.h ++++ b/base/callback_forward.h +@@ -5,13 +5,6 @@ + #ifndef BASE_CALLBACK_FORWARD_H_ + #define BASE_CALLBACK_FORWARD_H_ + +-namespace base { +- +-template +-class Callback; +- +-typedef Callback Closure; +- +-} // namespace base ++#include "base/callback.h" + + #endif // BASE_CALLBACK_FORWARD_H +diff --git a/content/browser/devtools/worker_devtools_manager.cc b/content/browser/devtools/worker_devtools_manager.cc +index dd54f80..14efaa5 100644 +--- a/content/browser/devtools/worker_devtools_manager.cc ++++ b/content/browser/devtools/worker_devtools_manager.cc +@@ -41,17 +41,6 @@ base::LazyInstance::Leaky g_orphan_map = LAZY_INSTANCE_INITIALIZER; + + } // namespace + +-struct WorkerDevToolsManager::TerminatedInspectedWorker { +- TerminatedInspectedWorker(WorkerId id, const GURL& url, const string16& name) +- : old_worker_id(id), +- worker_url(url), +- worker_name(name) {} +- WorkerId old_worker_id; +- GURL worker_url; +- string16 worker_name; +-}; +- +- + class WorkerDevToolsManager::WorkerDevToolsAgentHost + : public IPCDevToolsAgentHost { + public: +@@ -190,19 +179,6 @@ class WorkerDevToolsManager::DetachedClientHosts { + } + }; + +-struct WorkerDevToolsManager::InspectedWorker { +- InspectedWorker(WorkerProcessHost* host, int route_id, const GURL& url, +- const string16& name) +- : host(host), +- route_id(route_id), +- worker_url(url), +- worker_name(name) {} +- WorkerProcessHost* const host; +- int const route_id; +- GURL worker_url; +- string16 worker_name; +-}; +- + // static + WorkerDevToolsManager* WorkerDevToolsManager::GetInstance() { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); +diff --git a/content/browser/devtools/worker_devtools_manager.h b/content/browser/devtools/worker_devtools_manager.h +index 7ea8840..0f0111e 100644 +--- a/content/browser/devtools/worker_devtools_manager.h ++++ b/content/browser/devtools/worker_devtools_manager.h +@@ -49,7 +49,20 @@ class WorkerDevToolsManager { + private: + friend struct DefaultSingletonTraits; + class DetachedClientHosts; +- struct InspectedWorker; ++ ++ struct InspectedWorker { ++ InspectedWorker(WorkerProcessHost* host, int route_id, const GURL& url, ++ const string16& name) ++ : host(host), ++ route_id(route_id), ++ worker_url(url), ++ worker_name(name) {} ++ WorkerProcessHost* const host; ++ int const route_id; ++ GURL worker_url; ++ string16 worker_name; ++ }; ++ + typedef std::list InspectedWorkersList; + + WorkerDevToolsManager(); +@@ -79,7 +92,16 @@ class WorkerDevToolsManager { + + InspectedWorkersList inspected_workers_; + +- struct TerminatedInspectedWorker; ++ struct TerminatedInspectedWorker { ++ TerminatedInspectedWorker(WorkerId id, const GURL& url, const string16& name) ++ : old_worker_id(id), ++ worker_url(url), ++ worker_name(name) {} ++ WorkerId old_worker_id; ++ GURL worker_url; ++ string16 worker_name; ++ }; ++ + typedef std::list TerminatedInspectedWorkers; + // List of terminated workers for which there may be a devtools client on + // the UI thread. Worker entry is added into this list when inspected worker +diff --git a/content/browser/in_process_webkit/indexed_db_dispatcher_host.h b/content/browser/in_process_webkit/indexed_db_dispatcher_host.h +index 773c7b8..3c52971 100644 +--- a/content/browser/in_process_webkit/indexed_db_dispatcher_host.h ++++ b/content/browser/in_process_webkit/indexed_db_dispatcher_host.h +@@ -11,8 +11,8 @@ + #include "base/basictypes.h" + #include "base/id_map.h" + #include "content/public/browser/browser_message_filter.h" ++#include "googleurl/src/gurl.h" + +-class GURL; + struct IndexedDBDatabaseMetadata; + struct IndexedDBHostMsg_DatabaseCount_Params; + struct IndexedDBHostMsg_DatabaseCreateIndex_Params; +diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc +index 688e241..bf02285 100644 +--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc ++++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc +@@ -12,17 +12,6 @@ + + namespace content { + +-struct MediaStreamDispatcherHost::StreamRequest { +- StreamRequest() : render_view_id(0), page_request_id(0) {} +- StreamRequest(int render_view_id, int page_request_id) +- : render_view_id(render_view_id), +- page_request_id(page_request_id ) { +- } +- int render_view_id; +- // Id of the request generated by MediaStreamDispatcher. +- int page_request_id; +-}; +- + MediaStreamDispatcherHost::MediaStreamDispatcherHost( + int render_process_id, + MediaStreamManager* media_stream_manager) +diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.h b/content/browser/renderer_host/media/media_stream_dispatcher_host.h +index 4b94496..0ea2f3f 100644 +--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.h ++++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.h +@@ -71,7 +71,17 @@ class CONTENT_EXPORT MediaStreamDispatcherHost : public BrowserMessageFilter, + int render_process_id_; + MediaStreamManager* media_stream_manager_; + +- struct StreamRequest; ++ struct StreamRequest { ++ StreamRequest() : render_view_id(0), page_request_id(0) {} ++ StreamRequest(int render_view_id, int page_request_id) ++ : render_view_id(render_view_id), ++ page_request_id(page_request_id ) { ++ } ++ int render_view_id; ++ // Id of the request generated by MediaStreamDispatcher. ++ int page_request_id; ++ }; ++ + typedef std::map StreamMap; + // Streams generated for this host. + StreamMap streams_; +diff --git a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h +index 8019d3e..46d89d3 100644 +--- a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h ++++ b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.h +@@ -13,6 +13,7 @@ + #include "base/files/file_path.h" + #include "content/browser/renderer_host/pepper/content_browser_pepper_host_factory.h" + #include "content/common/content_export.h" ++#include "content/common/pepper_renderer_instance_data.h" + #include "content/public/browser/browser_ppapi_host.h" + #include "content/public/common/process_type.h" + #include "ipc/ipc_channel_proxy.h" +@@ -20,8 +21,6 @@ + + namespace content { + +-struct PepperRendererInstanceData; +- + class CONTENT_EXPORT BrowserPpapiHostImpl : public BrowserPpapiHost { + public: + // The creator is responsible for calling set_plugin_process_handle as soon +diff --git a/content/browser/worker_host/message_port_service.cc b/content/browser/worker_host/message_port_service.cc +index 2ad3b19..d0563f0 100644 +--- a/content/browser/worker_host/message_port_service.cc ++++ b/content/browser/worker_host/message_port_service.cc +@@ -9,21 +9,6 @@ + + namespace content { + +-struct MessagePortService::MessagePort { +- // |filter| and |route_id| are what we need to send messages to the port. +- // |filter| is just a weak pointer since we get notified when its process has +- // gone away and remove it. +- WorkerMessageFilter* filter; +- int route_id; +- // A globally unique id for this message port. +- int message_port_id; +- // The globally unique id of the entangled message port. +- int entangled_message_port_id; +- // If true, all messages to this message port are queued and not delivered. +- bool queue_messages; +- QueuedMessages queued_messages; +-}; +- + MessagePortService* MessagePortService::GetInstance() { + return Singleton::get(); + } +diff --git a/content/browser/worker_host/message_port_service.h b/content/browser/worker_host/message_port_service.h +index b85e76b..e6bf717 100644 +--- a/content/browser/worker_host/message_port_service.h ++++ b/content/browser/worker_host/message_port_service.h +@@ -61,7 +61,21 @@ class MessagePortService { + // verify that the message port id exists. + void Erase(int message_port_id); + +- struct MessagePort; ++ struct MessagePort { ++ // |filter| and |route_id| are what we need to send messages to the port. ++ // |filter| is just a weak pointer since we get notified when its process has ++ // gone away and remove it. ++ WorkerMessageFilter* filter; ++ int route_id; ++ // A globally unique id for this message port. ++ int message_port_id; ++ // The globally unique id of the entangled message port. ++ int entangled_message_port_id; ++ // If true, all messages to this message port are queued and not delivered. ++ bool queue_messages; ++ QueuedMessages queued_messages; ++ }; ++ + typedef std::map MessagePorts; + MessagePorts message_ports_; + +diff --git a/content/common/gpu/gpu_messages.h b/content/common/gpu/gpu_messages.h +index 05afcdb..7bb22d8 100644 +--- a/content/common/gpu/gpu_messages.h ++++ b/content/common/gpu/gpu_messages.h +@@ -110,10 +110,12 @@ IPC_STRUCT_BEGIN(GpuStreamTextureMsg_MatrixChanged_Params) + IPC_STRUCT_END() + #endif + +- IPC_STRUCT_TRAITS_BEGIN(gpu::DxDiagNode) ++#if defined(OS_WIN) ++IPC_STRUCT_TRAITS_BEGIN(gpu::DxDiagNode) + IPC_STRUCT_TRAITS_MEMBER(values) + IPC_STRUCT_TRAITS_MEMBER(children) + IPC_STRUCT_TRAITS_END() ++#endif + + IPC_STRUCT_TRAITS_BEGIN(gpu::GpuPerformanceStats) + IPC_STRUCT_TRAITS_MEMBER(graphics) +diff --git a/content/public/test/test_file_error_injector.h b/content/public/test/test_file_error_injector.h +index c056780..23a5520 100644 +--- a/content/public/test/test_file_error_injector.h ++++ b/content/public/test/test_file_error_injector.h +@@ -13,8 +13,7 @@ + #include "base/memory/scoped_ptr.h" + #include "base/memory/ref_counted.h" + #include "content/public/browser/download_interrupt_reasons.h" +- +-class GURL; ++#include "googleurl/src/gurl.h" + + namespace content { + +diff --git a/content/renderer/media/media_stream_dispatcher.cc b/content/renderer/media/media_stream_dispatcher.cc +index 2317380..8b77b13 100644 +--- a/content/renderer/media/media_stream_dispatcher.cc ++++ b/content/renderer/media/media_stream_dispatcher.cc +@@ -14,27 +14,6 @@ + + namespace content { + +-struct MediaStreamDispatcher::Request { +- Request(const base::WeakPtr& handler, +- int request_id, +- int ipc_request) +- : handler(handler), +- request_id(request_id), +- ipc_request(ipc_request) { +- } +- base::WeakPtr handler; +- int request_id; +- int ipc_request; +-}; +- +-struct MediaStreamDispatcher::Stream { +- Stream() {} +- ~Stream() {} +- base::WeakPtr handler; +- StreamDeviceInfoArray audio_array; +- StreamDeviceInfoArray video_array; +-}; +- + MediaStreamDispatcher::EnumerationRequest::EnumerationRequest( + const base::WeakPtr& handler, + int request_id) +diff --git a/content/renderer/media/media_stream_dispatcher.h b/content/renderer/media/media_stream_dispatcher.h +index e013864..8624e1f 100644 +--- a/content/renderer/media/media_stream_dispatcher.h ++++ b/content/renderer/media/media_stream_dispatcher.h +@@ -91,11 +91,29 @@ class CONTENT_EXPORT MediaStreamDispatcher + FRIEND_TEST_ALL_PREFIXES(MediaStreamDispatcherTest, TestFailure); + FRIEND_TEST_ALL_PREFIXES(MediaStreamDispatcherTest, CancelGenerateStream); + +- struct Request; ++ struct Request { ++ Request(const base::WeakPtr& handler, ++ int request_id, ++ int ipc_request) ++ : handler(handler), ++ request_id(request_id), ++ ipc_request(ipc_request) { ++ } ++ base::WeakPtr handler; ++ int request_id; ++ int ipc_request; ++ }; + + // Private class for keeping track of opened devices and who have + // opened it. +- struct Stream; ++ struct Stream { ++ Stream() {} ++ ~Stream() {} ++ base::WeakPtr handler; ++ StreamDeviceInfoArray audio_array; ++ StreamDeviceInfoArray video_array; ++ }; ++ + + struct EnumerationRequest { + EnumerationRequest( +diff --git a/gpu/config/dx_diag_node.cc b/gpu/config/dx_diag_node.cc +index e0902ca..c1e84ae 100644 +--- a/gpu/config/dx_diag_node.cc ++++ b/gpu/config/dx_diag_node.cc +@@ -4,6 +4,8 @@ + + #include "gpu/config/dx_diag_node.h" + ++#if defined(OS_WIN) ++ + namespace gpu { + + DxDiagNode::DxDiagNode() {} +@@ -11,3 +13,5 @@ DxDiagNode::DxDiagNode() {} + DxDiagNode::~DxDiagNode() {} + + } // namespace gpu ++ ++#endif // defined(OS_WIN) +diff --git a/gpu/config/dx_diag_node.h b/gpu/config/dx_diag_node.h +index 33d29b3..45ffa65 100644 +--- a/gpu/config/dx_diag_node.h ++++ b/gpu/config/dx_diag_node.h +@@ -8,6 +8,8 @@ + #ifndef GPU_CONFIG_DX_DIAG_NODE_H_ + #define GPU_CONFIG_DX_DIAG_NODE_H_ + ++#if defined(OS_WIN) ++ + #include + #include + +@@ -24,4 +26,6 @@ struct GPU_EXPORT DxDiagNode { + + } // namespace gpu + ++#endif // defined(OS_WIN) ++ + #endif // GPU_CONFIG_DX_DIAG_NODE_H_ +diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc +index 7754a49..8f8d274 100644 +--- a/media/filters/ffmpeg_audio_decoder.cc ++++ b/media/filters/ffmpeg_audio_decoder.cc +@@ -21,12 +21,6 @@ + + namespace media { + +-// Helper structure for managing multiple decoded audio frames per packet. +-struct QueuedAudioBuffer { +- AudioDecoder::Status status; +- scoped_refptr buffer; +-}; +- + // Returns true if the decode result was end of stream. + static inline bool IsEndOfStream(int result, int decoded_size, + const scoped_refptr& input) { +diff --git a/media/filters/ffmpeg_audio_decoder.h b/media/filters/ffmpeg_audio_decoder.h +index 92b1d1b..dc470b7 100644 +--- a/media/filters/ffmpeg_audio_decoder.h ++++ b/media/filters/ffmpeg_audio_decoder.h +@@ -26,7 +26,12 @@ class AudioBus; + class AudioTimestampHelper; + class DataBuffer; + class DecoderBuffer; +-struct QueuedAudioBuffer; ++// Helper structure for managing multiple decoded audio frames per packet. ++struct QueuedAudioBuffer { ++ AudioDecoder::Status status; ++ scoped_refptr buffer; ++}; ++ + + class MEDIA_EXPORT FFmpegAudioDecoder : public AudioDecoder { + public: +diff --git a/net/cert/mock_cert_verifier.cc b/net/cert/mock_cert_verifier.cc +index ea5538e..a30e3d5 100644 +--- a/net/cert/mock_cert_verifier.cc ++++ b/net/cert/mock_cert_verifier.cc +@@ -13,25 +13,6 @@ + + namespace net { + +-struct MockCertVerifier::Rule { +- Rule(X509Certificate* cert, +- const std::string& hostname, +- const CertVerifyResult& result, +- int rv) +- : cert(cert), +- hostname(hostname), +- result(result), +- rv(rv) { +- DCHECK(cert); +- DCHECK(result.verified_cert.get()); +- } +- +- scoped_refptr cert; +- std::string hostname; +- CertVerifyResult result; +- int rv; +-}; +- + MockCertVerifier::MockCertVerifier() : default_result_(ERR_CERT_INVALID) {} + + MockCertVerifier::~MockCertVerifier() {} +diff --git a/net/cert/mock_cert_verifier.h b/net/cert/mock_cert_verifier.h +index 5af7b7e..704c66b 100644 +--- a/net/cert/mock_cert_verifier.h ++++ b/net/cert/mock_cert_verifier.h +@@ -57,7 +57,25 @@ class MockCertVerifier : public CertVerifier { + int rv); + + private: +- struct Rule; ++ struct Rule { ++ Rule(X509Certificate* cert, ++ const std::string& hostname, ++ const CertVerifyResult& result, ++ int rv) ++ : cert(cert), ++ hostname(hostname), ++ result(result), ++ rv(rv) { ++ DCHECK(cert); ++ DCHECK(result.verified_cert.get()); ++ } ++ ++ scoped_refptr cert; ++ std::string hostname; ++ CertVerifyResult result; ++ int rv; ++ }; ++ + typedef std::list RuleList; + + int default_result_; +diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc +index dba69d9..28c0b7f 100644 +--- a/net/dns/mock_host_resolver.cc ++++ b/net/dns/mock_host_resolver.cc +@@ -209,37 +209,6 @@ void MockHostResolverBase::ResolveNow(size_t id) { + + //----------------------------------------------------------------------------- + +-struct RuleBasedHostResolverProc::Rule { +- enum ResolverType { +- kResolverTypeFail, +- kResolverTypeSystem, +- kResolverTypeIPLiteral, +- }; +- +- ResolverType resolver_type; +- std::string host_pattern; +- AddressFamily address_family; +- HostResolverFlags host_resolver_flags; +- std::string replacement; +- std::string canonical_name; +- int latency_ms; // In milliseconds. +- +- Rule(ResolverType resolver_type, +- const std::string& host_pattern, +- AddressFamily address_family, +- HostResolverFlags host_resolver_flags, +- const std::string& replacement, +- const std::string& canonical_name, +- int latency_ms) +- : resolver_type(resolver_type), +- host_pattern(host_pattern), +- address_family(address_family), +- host_resolver_flags(host_resolver_flags), +- replacement(replacement), +- canonical_name(canonical_name), +- latency_ms(latency_ms) {} +-}; +- + RuleBasedHostResolverProc::RuleBasedHostResolverProc(HostResolverProc* previous) + : HostResolverProc(previous) { + } +diff --git a/net/dns/mock_host_resolver.h b/net/dns/mock_host_resolver.h +index b73bd0a..282521c 100644 +--- a/net/dns/mock_host_resolver.h ++++ b/net/dns/mock_host_resolver.h +@@ -201,7 +201,37 @@ class RuleBasedHostResolverProc : public HostResolverProc { + int* os_error) OVERRIDE; + + private: +- struct Rule; ++ struct Rule { ++ enum ResolverType { ++ kResolverTypeFail, ++ kResolverTypeSystem, ++ kResolverTypeIPLiteral, ++ }; ++ ++ ResolverType resolver_type; ++ std::string host_pattern; ++ AddressFamily address_family; ++ HostResolverFlags host_resolver_flags; ++ std::string replacement; ++ std::string canonical_name; ++ int latency_ms; // In milliseconds. ++ ++ Rule(ResolverType resolver_type, ++ const std::string& host_pattern, ++ AddressFamily address_family, ++ HostResolverFlags host_resolver_flags, ++ const std::string& replacement, ++ const std::string& canonical_name, ++ int latency_ms) ++ : resolver_type(resolver_type), ++ host_pattern(host_pattern), ++ address_family(address_family), ++ host_resolver_flags(host_resolver_flags), ++ replacement(replacement), ++ canonical_name(canonical_name), ++ latency_ms(latency_ms) {} ++ }; ++ + typedef std::list RuleList; + + virtual ~RuleBasedHostResolverProc(); +diff --git a/net/http/http_auth_cache.h b/net/http/http_auth_cache.h +index 3880dbf..d672601 100644 +--- a/net/http/http_auth_cache.h ++++ b/net/http/http_auth_cache.h +@@ -26,7 +26,77 @@ namespace net { + // Entries can be looked up by either (origin, realm, scheme) or (origin, path). + class NET_EXPORT_PRIVATE HttpAuthCache { + public: +- class Entry; ++ class NET_EXPORT_PRIVATE Entry { ++ public: ++ ~Entry(); ++ ++ const GURL& origin() const { ++ return origin_; ++ } ++ ++ // The case-sensitive realm string of the challenge. ++ const std::string realm() const { ++ return realm_; ++ } ++ ++ // The authentication scheme of the challenge. ++ HttpAuth::Scheme scheme() const { ++ return scheme_; ++ } ++ ++ // The authentication challenge. ++ const std::string auth_challenge() const { ++ return auth_challenge_; ++ } ++ ++ // The login credentials. ++ const AuthCredentials& credentials() const { ++ return credentials_; ++ } ++ ++ int IncrementNonceCount() { ++ return ++nonce_count_; ++ } ++ ++ void UpdateStaleChallenge(const std::string& auth_challenge); ++ ++ private: ++ friend class HttpAuthCache; ++ FRIEND_TEST_ALL_PREFIXES(HttpAuthCacheTest, AddPath); ++ FRIEND_TEST_ALL_PREFIXES(HttpAuthCacheTest, AddToExistingEntry); ++ ++ typedef std::list PathList; ++ ++ Entry(); ++ ++ // Adds a path defining the realm's protection space. If the path is ++ // already contained in the protection space, is a no-op. ++ void AddPath(const std::string& path); ++ ++ // Returns true if |dir| is contained within the realm's protection ++ // space. |*path_len| is set to the length of the enclosing path if ++ // such a path exists and |path_len| is non-NULL. If no enclosing ++ // path is found, |*path_len| is left unmodified. ++ // ++ // Note that proxy auth cache entries are associated with empty ++ // paths. Therefore it is possible for HasEnclosingPath() to return ++ // true and set |*path_len| to 0. ++ bool HasEnclosingPath(const std::string& dir, size_t* path_len); ++ ++ // |origin_| contains the {protocol, host, port} of the server. ++ GURL origin_; ++ std::string realm_; ++ HttpAuth::Scheme scheme_; ++ ++ // Identity. ++ std::string auth_challenge_; ++ AuthCredentials credentials_; ++ ++ int nonce_count_; ++ ++ // List of paths that define the realm's protection space. ++ PathList paths_; ++ }; + + // Prevent unbounded memory growth. These are safeguards for abuse; it is + // not expected that the limits will be reached in ordinary usage. +@@ -106,78 +176,6 @@ class NET_EXPORT_PRIVATE HttpAuthCache { + }; + + // An authentication realm entry. +-class NET_EXPORT_PRIVATE HttpAuthCache::Entry { +- public: +- ~Entry(); +- +- const GURL& origin() const { +- return origin_; +- } +- +- // The case-sensitive realm string of the challenge. +- const std::string realm() const { +- return realm_; +- } +- +- // The authentication scheme of the challenge. +- HttpAuth::Scheme scheme() const { +- return scheme_; +- } +- +- // The authentication challenge. +- const std::string auth_challenge() const { +- return auth_challenge_; +- } +- +- // The login credentials. +- const AuthCredentials& credentials() const { +- return credentials_; +- } +- +- int IncrementNonceCount() { +- return ++nonce_count_; +- } +- +- void UpdateStaleChallenge(const std::string& auth_challenge); +- +- private: +- friend class HttpAuthCache; +- FRIEND_TEST_ALL_PREFIXES(HttpAuthCacheTest, AddPath); +- FRIEND_TEST_ALL_PREFIXES(HttpAuthCacheTest, AddToExistingEntry); +- +- typedef std::list PathList; +- +- Entry(); +- +- // Adds a path defining the realm's protection space. If the path is +- // already contained in the protection space, is a no-op. +- void AddPath(const std::string& path); +- +- // Returns true if |dir| is contained within the realm's protection +- // space. |*path_len| is set to the length of the enclosing path if +- // such a path exists and |path_len| is non-NULL. If no enclosing +- // path is found, |*path_len| is left unmodified. +- // +- // Note that proxy auth cache entries are associated with empty +- // paths. Therefore it is possible for HasEnclosingPath() to return +- // true and set |*path_len| to 0. +- bool HasEnclosingPath(const std::string& dir, size_t* path_len); +- +- // |origin_| contains the {protocol, host, port} of the server. +- GURL origin_; +- std::string realm_; +- HttpAuth::Scheme scheme_; +- +- // Identity. +- std::string auth_challenge_; +- AuthCredentials credentials_; +- +- int nonce_count_; +- +- // List of paths that define the realm's protection space. +- PathList paths_; +-}; +- + } // namespace net + + #endif // NET_HTTP_HTTP_AUTH_CACHE_H_ +diff --git a/ui/gfx/image/image_family.h b/ui/gfx/image/image_family.h +index b2a2c07..902dede 100644 +--- a/ui/gfx/image/image_family.h ++++ b/ui/gfx/image/image_family.h +@@ -27,8 +27,16 @@ class Size; + // include high-DPI representations). + class UI_EXPORT ImageFamily { + private: +- // Forward declaration. +- struct MapKey; ++ // An pair. ++ // A 0x0 image has aspect ratio 1.0. 0xN and Nx0 images are treated as 0x0. ++ struct MapKey : std::pair { ++ MapKey(float aspect, int width) ++ : std::pair(aspect, width) {} ++ ++ float aspect() const { return first; } ++ ++ int width() const { return second; } ++ }; + + public: + // Type for iterating over all images in the family, in order. +@@ -127,17 +135,6 @@ class UI_EXPORT ImageFamily { + const gfx::Image* GetBest(const gfx::Size& size) const; + + private: +- // An pair. +- // A 0x0 image has aspect ratio 1.0. 0xN and Nx0 images are treated as 0x0. +- struct MapKey : std::pair { +- MapKey(float aspect, int width) +- : std::pair(aspect, width) {} +- +- float aspect() const { return first; } +- +- int width() const { return second; } +- }; +- + // Find the closest aspect ratio in the map to |desired_aspect|. + // Ties are broken by the thinner aspect. + // |map_| must not be empty. |desired_aspect| must be > 0.0. +diff --git a/webkit/browser/dom_storage/dom_storage_namespace.h b/webkit/browser/dom_storage/dom_storage_namespace.h +index 758ca2e..10d6662 100644 +--- a/webkit/browser/dom_storage/dom_storage_namespace.h ++++ b/webkit/browser/dom_storage/dom_storage_namespace.h +@@ -10,10 +10,9 @@ + #include "base/basictypes.h" + #include "base/files/file_path.h" + #include "base/memory/ref_counted.h" ++#include "googleurl/src/gurl.h" + #include "webkit/browser/webkit_storage_browser_export.h" + +-class GURL; +- + namespace dom_storage { + + class DomStorageArea; +diff --git a/webkit/support/weburl_loader_mock_factory.cc b/webkit/support/weburl_loader_mock_factory.cc +index 1ac9bd4..b5d2e75 100644 +--- a/webkit/support/weburl_loader_mock_factory.cc ++++ b/webkit/support/weburl_loader_mock_factory.cc +@@ -23,11 +23,6 @@ using WebKit::WebURLLoader; + using WebKit::WebURLRequest; + using WebKit::WebURLResponse; + +-struct WebURLLoaderMockFactory::ResponseInfo { +- WebKit::WebURLResponse response; +- base::FilePath file_path; +-}; +- + WebURLLoaderMockFactory::WebURLLoaderMockFactory() {} + + WebURLLoaderMockFactory::~WebURLLoaderMockFactory() {} +diff --git a/webkit/support/weburl_loader_mock_factory.h b/webkit/support/weburl_loader_mock_factory.h +index 97ea5c8..2a18af3 100644 +--- a/webkit/support/weburl_loader_mock_factory.h ++++ b/webkit/support/weburl_loader_mock_factory.h +@@ -9,12 +9,12 @@ + + #include "base/files/file_path.h" + #include "third_party/WebKit/public/platform/WebURL.h" ++#include "third_party/WebKit/public/platform/WebURLError.h" + #include "third_party/WebKit/public/platform/WebURLRequest.h" + #include "third_party/WebKit/public/platform/WebURLResponse.h" + + namespace WebKit { + class WebData; +-struct WebURLError; + class WebURLLoader; + } + +@@ -75,7 +75,11 @@ class WebURLLoaderMockFactory { + void CancelLoad(WebURLLoaderMock* loader); + + private: +- struct ResponseInfo; ++ struct ResponseInfo { ++ WebKit::WebURLResponse response; ++ base::FilePath file_path; ++ }; ++ + + // Loads the specified request and populates the response, error and data + // accordingly. +-- +1.8.0.1 + diff --git a/patches/patch-chromium.sh b/patches/patch-chromium.sh index 64893d6e4..f671d847c 100755 --- a/patches/patch-chromium.sh +++ b/patches/patch-chromium.sh @@ -61,9 +61,18 @@ git submodule update --recursive cd $CHROMIUM_SRC_DIR echo "Entering $PWD" -git am $PATCH_DIR/0001-My-local-fixes.patch $PATCH_DIR/0002-Add-WebEngineContext-to-RunLoop-s-friends.patch +git am $PATCH_DIR/0001-My-local-fixes.patch +git am $PATCH_DIR/0002-Add-WebEngineContext-to-RunLoop-s-friends.patch +git am $PATCH_DIR/0001-Mac-Use-libc-instead-of-stdlibc.patch +git am $PATCH_DIR/0002-Clang-libc-does-not-support-incomplete-types-in-temp.patch -cd tools/gyp +cd $CHROMIUM_SRC_DIR/third_party/WebKit +echo "Entering $PWD" + +git am $PATCH_DIR/0001-Remove-leftovers-from-WebKitSystemInterface.patch + +cd $CHROMIUM_SRC_DIR/tools/gyp echo "Entering $PWD" git am $PATCH_DIR/0001-GYP-Fix-build-with-toplevel-dir.patch +git am $PATCH_DIR/0001-Add-support-for-libc-to-xcode_emulation.py.patch -- cgit v1.2.3