diff options
author | Rene Ladan <rene@FreeBSD.org> | 2011-10-18 18:36:21 +0000 |
---|---|---|
committer | Rene Ladan <rene@FreeBSD.org> | 2011-10-18 18:36:21 +0000 |
commit | 49bd254a6b068cbbd84a397542dae0435606dffc (patch) | |
tree | e10fd3e9336fec7ef22575356adcbfb45d302d0d /www/chromium/files | |
parent | 185fd9100b9edcb1cf802b26853ac48914c83bf9 (diff) |
Merge from Chruetertee repository:
- r235 : remove hacks in Zygote, allowing processes to exit more cleanly.
- r248 : switch back to previous rendering method (the same as OSX uses).
Bump PORTREVISION
Submitted by: George Liaskos
Notes
Notes:
svn path=/head/; revision=283839
Diffstat (limited to 'www/chromium/files')
26 files changed, 557 insertions, 148 deletions
diff --git a/www/chromium/files/patch-base__process_util.h b/www/chromium/files/patch-base__process_util.h index 8aa26b63cf63..d33f037627a4 100644 --- a/www/chromium/files/patch-base__process_util.h +++ b/www/chromium/files/patch-base__process_util.h @@ -1,5 +1,5 @@ ---- base/process_util.h.orig 2011-06-24 11:30:52.000000000 +0300 -+++ base/process_util.h 2011-06-26 16:55:34.997784494 +0300 +--- base/process_util.h.orig 2011-09-14 11:01:29.000000000 +0300 ++++ base/process_util.h 2011-09-30 23:12:21.000000000 +0300 @@ -28,6 +28,10 @@ #include <sys/types.h> #endif @@ -20,23 +20,7 @@ // Returns the path to the executable of the given process. BASE_API FilePath GetProcessExecutablePath(ProcessHandle process); -@@ -172,13 +176,14 @@ - // Exposed for testing. - BASE_API int ParseProcStatCPU(const std::string& input); - -+#elif defined(OS_LINUX) - static const char kAdjustOOMScoreSwitch[] = "--adjust-oom-score"; - - // This adjusts /proc/process/oom_adj so the Linux OOM killer will prefer - // certain process types over others. The range for the adjustment is - // [-17,15], with [0,15] being user accessible. - BASE_API bool AdjustOOMScore(ProcessId process, int score); --#endif -+#endif /* defined(OS_LINUX) || defined(OS_FREEBSD) */ - - #if defined(OS_POSIX) - // Returns the ID for the parent of the given process. -@@ -447,7 +452,7 @@ +@@ -467,7 +471,7 @@ #if defined(OS_WIN) HANDLE snapshot_; bool started_iteration_; diff --git a/www/chromium/files/patch-base__process_util_freebsd.cc b/www/chromium/files/patch-base__process_util_freebsd.cc index 0f00b7cf91b8..cfdafe209846 100644 --- a/www/chromium/files/patch-base__process_util_freebsd.cc +++ b/www/chromium/files/patch-base__process_util_freebsd.cc @@ -1,6 +1,6 @@ ---- /dev/null 2011-03-21 20:44:00.000000000 +0200 -+++ base/process_util_freebsd.cc 2011-03-21 20:47:32.701912810 +0200 -@@ -0,0 +1,314 @@ +--- /dev/null 2011-10-02 18:27:33.000000000 +0300 ++++ base/process_util_freebsd.cc 2011-10-02 18:26:22.000000000 +0300 +@@ -0,0 +1,320 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -314,4 +314,10 @@ + NOTIMPLEMENTED(); + return; +} ++ ++bool AdjustOOMScore(ProcessId process, int score) { ++ NOTIMPLEMENTED(); ++ return false; +} ++ ++} // namespace base diff --git a/www/chromium/files/patch-content__browser__renderer_host__browser_render_process_host.cc b/www/chromium/files/patch-content__browser__renderer_host__browser_render_process_host.cc new file mode 100644 index 000000000000..6060f7250042 --- /dev/null +++ b/www/chromium/files/patch-content__browser__renderer_host__browser_render_process_host.cc @@ -0,0 +1,11 @@ +--- content/browser/renderer_host/browser_render_process_host.cc.orig 2011-03-20 22:02:04.283738713 +0200 ++++ content/browser/renderer_host/browser_render_process_host.cc 2011-03-20 22:02:04.448747953 +0200 +@@ -886,7 +886,7 @@ + HANDLE section = app::win::GetSectionFromProcess( + dib_id.handle, GetHandle(), false /* read write */); + return TransportDIB::Map(section); +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + // On OSX, the browser allocates all DIBs and keeps a file descriptor around + // for each. + return widget_helper_->MapTransportDIB(dib_id); diff --git a/www/chromium/files/patch-content__browser__renderer_host__mock_render_process_host.cc b/www/chromium/files/patch-content__browser__renderer_host__mock_render_process_host.cc new file mode 100644 index 000000000000..e5de334d4a2e --- /dev/null +++ b/www/chromium/files/patch-content__browser__renderer_host__mock_render_process_host.cc @@ -0,0 +1,11 @@ +--- content/browser/renderer_host/mock_render_process_host.cc.orig 2010-12-16 02:11:57.000000000 +0100 ++++ content/browser/renderer_host/mock_render_process_host.cc 2010-12-20 20:15:08.000000000 +0100 +@@ -106,7 +106,7 @@ + DuplicateHandle(GetCurrentProcess(), dib_id.handle, GetCurrentProcess(), + &duped, 0, TRUE, DUPLICATE_SAME_ACCESS); + transport_dib_ = TransportDIB::Map(duped); +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + // On Mac, TransportDIBs are always created in the browser, so we cannot map + // one from a dib_id. + transport_dib_ = TransportDIB::Create(100 * 100 * 4, 0); diff --git a/www/chromium/files/patch-content__browser__renderer_host__render_message_filter.cc b/www/chromium/files/patch-content__browser__renderer_host__render_message_filter.cc new file mode 100644 index 000000000000..7466aff71efd --- /dev/null +++ b/www/chromium/files/patch-content__browser__renderer_host__render_message_filter.cc @@ -0,0 +1,20 @@ +--- content/browser/renderer_host/render_message_filter.cc.orig 2011-06-24 11:30:32.000000000 +0300 ++++ content/browser/renderer_host/render_message_filter.cc 2011-06-26 20:58:31.256783053 +0300 +@@ -360,7 +360,7 @@ + OnCheckNotificationPermission) + IPC_MESSAGE_HANDLER(ViewHostMsg_AllocateSharedMemoryBuffer, + OnAllocateSharedMemoryBuffer) +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + IPC_MESSAGE_HANDLER(ViewHostMsg_AllocTransportDIB, OnAllocTransportDIB) + IPC_MESSAGE_HANDLER(ViewHostMsg_FreeTransportDIB, OnFreeTransportDIB) + #endif +@@ -647,7 +647,7 @@ + return context_getter->GetURLRequestContext(); + } + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + void RenderMessageFilter::OnAllocTransportDIB( + size_t size, bool cache_in_browser, TransportDIB::Handle* handle) { + render_widget_helper_->AllocTransportDIB(size, cache_in_browser, handle); diff --git a/www/chromium/files/patch-content__browser__renderer_host__render_widget_helper.cc b/www/chromium/files/patch-content__browser__renderer_host__render_widget_helper.cc new file mode 100644 index 000000000000..1a5da08da1fc --- /dev/null +++ b/www/chromium/files/patch-content__browser__renderer_host__render_widget_helper.cc @@ -0,0 +1,20 @@ +--- content/browser/renderer_host/render_widget_helper.cc.orig 2010-12-16 02:11:57.000000000 +0100 ++++ content/browser/renderer_host/render_widget_helper.cc 2010-12-20 20:15:08.000000000 +0100 +@@ -58,7 +58,7 @@ + // object, so we should not be destroyed unless pending_paints_ is empty! + DCHECK(pending_paints_.empty()); + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + ClearAllocatedDIBs(); + #endif + } +@@ -274,7 +274,7 @@ + host->CreateNewFullscreenWidget(route_id, popup_type); + } + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + TransportDIB* RenderWidgetHelper::MapTransportDIB(TransportDIB::Id dib_id) { + AutoLock locked(allocated_dibs_lock_); + diff --git a/www/chromium/files/patch-content__browser__renderer_host__render_widget_helper.h b/www/chromium/files/patch-content__browser__renderer_host__render_widget_helper.h new file mode 100644 index 000000000000..c53632ea7233 --- /dev/null +++ b/www/chromium/files/patch-content__browser__renderer_host__render_widget_helper.h @@ -0,0 +1,29 @@ +--- content/browser/renderer_host/render_widget_helper.h.orig 2010-12-16 02:11:57.000000000 +0100 ++++ content/browser/renderer_host/render_widget_helper.h 2010-12-20 20:15:08.000000000 +0100 +@@ -110,7 +110,7 @@ + const base::TimeDelta& max_delay, + IPC::Message* msg); + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Given the id of a transport DIB, return a mapping to it or NULL on error. + TransportDIB* MapTransportDIB(TransportDIB::Id dib_id); + #endif +@@ -134,7 +134,7 @@ + WebKit::WebPopupType popup_type, + int* route_id); + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Called on the IO thread to handle the allocation of a TransportDIB. If + // |cache_in_browser| is |true|, then a copy of the shmem is kept by the + // browser, and it is the caller's repsonsibility to call +@@ -191,7 +191,7 @@ + // Called on the IO thread to resume a cross-site response. + void OnCrossSiteClosePageACK(const ViewMsg_ClosePage_Params& params); + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Called on destruction to release all allocated transport DIBs + void ClearAllocatedDIBs(); + diff --git a/www/chromium/files/patch-content__browser__zygote_host_linux.cc b/www/chromium/files/patch-content__browser__zygote_host_linux.cc index 4259f298b34e..20c71f7dda0f 100644 --- a/www/chromium/files/patch-content__browser__zygote_host_linux.cc +++ b/www/chromium/files/patch-content__browser__zygote_host_linux.cc @@ -1,65 +1,13 @@ ---- content/browser/zygote_host_linux.cc.orig 2011-06-24 11:30:33.000000000 +0300 -+++ content/browser/zygote_host_linux.cc 2011-06-26 21:23:29.109780851 +0300 -@@ -61,8 +61,16 @@ - } - - ZygoteHost::~ZygoteHost() { -- if (init_) -+#if defined(OS_FREEBSD) -+ Pickle pickle; -+#endif -+ if (init_) { -+#if defined(OS_FREEBSD) -+ pickle.WriteInt(kCmdEnd); -+ HANDLE_EINTR(write(control_fd_, pickle.data(), pickle.size())); -+#endif - close(control_fd_); -+ } - } - - // static -@@ -160,6 +168,7 @@ - // We need to look for it. - // But first, wait for the zygote to tell us it's running. - // The sending code is in chrome/browser/zygote_main_linux.cc. -+#if defined(OS_LINUX) - std::vector<int> fds_vec; - const int kExpectedLength = sizeof(kZygoteMagic); - char buf[kExpectedLength]; -@@ -190,6 +199,7 @@ - // Reap the sandbox. - ProcessWatcher::EnsureProcessGetsReaped(process); - } -+#endif // defined(OS_LINUX) - } else { - // Not using the SUID sandbox. - pid_ = process; -@@ -256,9 +266,11 @@ - if (pid <= 0) +--- content/browser/zygote_host_linux.cc.orig 2011-10-02 18:12:41.000000000 +0300 ++++ content/browser/zygote_host_linux.cc 2011-10-02 18:11:51.000000000 +0300 +@@ -259,8 +259,10 @@ return base::kNullProcessHandle; } -- -+ -+#if defined(OS_LINUX) + ++#if !defined(OS_FREEBSD) const int kRendererScore = 5; AdjustRendererOOMScore(pid, kRendererScore); +#endif return pid; } -@@ -296,6 +308,7 @@ - selinux_valid = true; - } - -+#if defined(OS_LINUX) - if (using_suid_sandbox_ && !selinux) { - base::ProcessHandle sandbox_helper_process; - std::vector<std::string> adj_oom_score_cmdline; -@@ -313,6 +326,7 @@ - if (!base::AdjustOOMScore(pid, score)) - PLOG(ERROR) << "Failed to adjust OOM score of renderer with pid " << pid; - } -+#endif // defined(OS_LINUX) - } - - void ZygoteHost::EnsureProcessTerminated(pid_t process) { diff --git a/www/chromium/files/patch-content__browser__zygote_host_linux.h b/www/chromium/files/patch-content__browser__zygote_host_linux.h deleted file mode 100644 index edfc30d2c3f9..000000000000 --- a/www/chromium/files/patch-content__browser__zygote_host_linux.h +++ /dev/null @@ -1,12 +0,0 @@ ---- content/browser/zygote_host_linux.h.orig 2010-12-16 02:11:58.000000000 +0100 -+++ content/browser/zygote_host_linux.h 2010-12-20 20:15:08.000000000 +0100 -@@ -51,6 +51,9 @@ - kCmdReap = 1, // Reap a renderer child. - kCmdGetTerminationStatus = 2, // Check what happend to a child process. - kCmdGetSandboxStatus = 3, // Read a bitmask of kSandbox* -+#if defined(OS_FREEBSD) -+ kCmdEnd = 5, // Kill zygote for SOCK_DGRAM. -+#endif - }; - - // These form a bitmask which describes the conditions of the sandbox that diff --git a/www/chromium/files/patch-content__browser__zygote_main_linux.cc b/www/chromium/files/patch-content__browser__zygote_main_linux.cc index faf80f83ad1d..32cde774d1a5 100644 --- a/www/chromium/files/patch-content__browser__zygote_main_linux.cc +++ b/www/chromium/files/patch-content__browser__zygote_main_linux.cc @@ -1,6 +1,6 @@ ---- content/browser/zygote_main_linux.cc.orig 2011-06-24 11:30:33.000000000 +0300 -+++ content/browser/zygote_main_linux.cc 2011-06-26 21:25:52.734780676 +0300 -@@ -58,7 +58,7 @@ +--- content/browser/zygote_main_linux.cc.orig 2011-09-14 11:01:10.000000000 +0300 ++++ content/browser/zygote_main_linux.cc 2011-10-02 15:28:48.000000000 +0300 +@@ -57,7 +57,7 @@ #endif #if defined(ARCH_CPU_X86_FAMILY) && !defined(CHROMIUM_SELINUX) && \ @@ -9,32 +9,20 @@ // The seccomp sandbox is enabled on all ia32 and x86-64 processor as long as // we aren't using SELinux or clang. #define SECCOMP_SANDBOX -@@ -181,6 +181,11 @@ - case ZygoteHost::kCmdGetSandboxStatus: - HandleGetSandboxStatus(fd, pickle, iter); - return false; -+#if defined(OS_FREEBSD) -+ case ZygoteHost::kCmdEnd: -+ _exit(0); -+ return false; -+#endif - default: - NOTREACHED(); - break; -@@ -667,7 +672,7 @@ - - SkiaFontConfigSetImplementation( - new FontConfigIPC(kMagicSandboxIPCDescriptor)); -- +@@ -720,11 +720,16 @@ + // dumpable. + const CommandLine& command_line = *CommandLine::ForCurrentProcess(); + if (!command_line.HasSwitch(switches::kAllowSandboxDebugging)) { +#if !defined(OS_FREEBSD) - // Previously, we required that the binary be non-readable. This causes the - // kernel to mark the process as non-dumpable at startup. The thinking was - // that, although we were putting the renderers into a PID namespace (with -@@ -693,6 +698,7 @@ + prctl(PR_SET_DUMPABLE, 0, 0, 0, 0); + if (prctl(PR_GET_DUMPABLE, 0, 0, 0, 0)) { + LOG(ERROR) << "Failed to set non-dumpable flag"; return false; } ++#else ++ NOTIMPLEMENTED(); ++ return false; ++#endif } -+#endif // !OS_FREEBSD } else if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableSeccompSandbox)) { - PreSandboxInit(); diff --git a/www/chromium/files/patch-content__common__common_param_traits.h b/www/chromium/files/patch-content__common__common_param_traits.h new file mode 100644 index 000000000000..1cb5579ec583 --- /dev/null +++ b/www/chromium/files/patch-content__common__common_param_traits.h @@ -0,0 +1,11 @@ +--- content/common/common_param_traits.h.orig 2011-06-06 00:08:49.215163238 +0300 ++++ content/common/common_param_traits.h 2011-06-06 00:09:04.929165157 +0300 +@@ -187,7 +187,7 @@ + }; + #endif + +-#if defined(USE_X11) ++#if defined(USE_X11) && !defined(OS_FREEBSD) + template<> + struct ParamTraits<TransportDIB::Id> { + typedef TransportDIB::Id param_type; diff --git a/www/chromium/files/patch-content__common__plugin_messages.h b/www/chromium/files/patch-content__common__plugin_messages.h new file mode 100644 index 000000000000..bed300ec9240 --- /dev/null +++ b/www/chromium/files/patch-content__common__plugin_messages.h @@ -0,0 +1,38 @@ +--- content/common/plugin_messages.h.orig 2011-07-28 11:01:09.000000000 +0300 ++++ content/common/plugin_messages.h 2011-09-06 23:29:54.000000000 +0300 +@@ -111,7 +111,7 @@ + gfx::PluginWindowHandle /* output: X window id */) + #endif + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // On Mac OS X, we need the browser to keep track of plugin windows so + // that it can add and remove them from stacking groups, hide and show the + // menu bar, etc. We pass the window rect for convenience so that the +@@ -206,7 +206,7 @@ + IPC_MESSAGE_ROUTED1(PluginMsg_SetContentAreaFocus, + bool /* has_focus */) + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + IPC_MESSAGE_ROUTED1(PluginMsg_SetWindowFocus, + bool /* has_focus */) + +@@ -278,7 +278,7 @@ + IPC_MESSAGE_CONTROL1(PluginMsg_ResetModalDialogEvent, + gfx::NativeViewId /* containing_window */) + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // This message, used only on 10.6 and later, transmits the "fake" + // window handle allocated by the browser on behalf of the renderer + // to the GPU plugin. +@@ -358,7 +358,7 @@ + + IPC_MESSAGE_CONTROL0(PluginHostMsg_PluginShuttingDown) + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + IPC_MESSAGE_ROUTED1(PluginHostMsg_FocusChanged, + bool /* focused */) + diff --git a/www/chromium/files/patch-content__common__view_messages.h b/www/chromium/files/patch-content__common__view_messages.h new file mode 100644 index 000000000000..1ad3b87f2782 --- /dev/null +++ b/www/chromium/files/patch-content__common__view_messages.h @@ -0,0 +1,11 @@ +--- content/common/view_messages.h.orig 2011-06-05 19:01:24.752163332 +0300 ++++ content/common/view_messages.h 2011-06-05 19:01:40.420163036 +0300 +@@ -1783,7 +1783,7 @@ + IPC_MESSAGE_CONTROL1(ViewHostMsg_SuddenTerminationChanged, + bool /* enabled */) + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // On OSX, we cannot allocated shared memory from within the sandbox, so + // this call exists for the renderer to ask the browser to allocate memory + // on its behalf. We return a file descriptor to the POSIX shared memory. diff --git a/www/chromium/files/patch-content__renderer__pepper_plugin_delegate_impl.cc b/www/chromium/files/patch-content__renderer__pepper_plugin_delegate_impl.cc index 78c4b0de95e2..30d9fc55bc7e 100644 --- a/www/chromium/files/patch-content__renderer__pepper_plugin_delegate_impl.cc +++ b/www/chromium/files/patch-content__renderer__pepper_plugin_delegate_impl.cc @@ -1,11 +1,29 @@ ---- content/renderer/pepper_plugin_delegate_impl.cc.orig 2011-09-19 00:22:00.000000000 +0300 -+++ content/renderer/pepper_plugin_delegate_impl.cc 2011-09-19 00:22:35.000000000 +0300 -@@ -141,7 +141,7 @@ +--- content/renderer/pepper_plugin_delegate_impl.cc.orig 2011-05-06 12:02:55.000000000 +0300 ++++ content/renderer/pepper_plugin_delegate_impl.cc 2011-06-04 14:31:17.879380898 +0300 +@@ -112,7 +112,7 @@ + dib_(dib) { + } + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // On Mac, we have to tell the browser to free the transport DIB. + virtual ~PlatformImage2DImpl() { + if (dib_.get()) { +@@ -130,7 +130,7 @@ + *byte_count = dib_->size(); + #if defined(OS_WIN) return reinterpret_cast<intptr_t>(dib_->handle()); - #elif defined(OS_MACOSX) +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) return static_cast<intptr_t>(dib_->handle().fd); --#elif defined(OS_LINUX) -+#elif defined(OS_LINUX) || defined(OS_FREEBSD) + #elif defined(OS_LINUX) return static_cast<intptr_t>(dib_->handle()); - #endif - } +@@ -758,7 +758,7 @@ + uint32 buffer_size = width * height * 4; + + // Allocate the transport DIB and the PlatformCanvas pointing to it. +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // On the Mac, shared memory has to be created in the browser in order to + // work in the sandbox. Do this by sending a message to the browser + // requesting a TransportDIB (see also diff --git a/www/chromium/files/patch-content__renderer__render_process_impl.cc b/www/chromium/files/patch-content__renderer__render_process_impl.cc index 887915c68e29..cb310856542e 100644 --- a/www/chromium/files/patch-content__renderer__render_process_impl.cc +++ b/www/chromium/files/patch-content__renderer__render_process_impl.cc @@ -1,28 +1,24 @@ ---- content/renderer/render_process_impl.cc.orig 2011-09-14 01:53:06.000000000 +0300 -+++ content/renderer/render_process_impl.cc 2011-09-14 01:55:08.000000000 +0300 -@@ -87,7 +87,7 @@ - - bool RenderProcessImpl::InProcessPlugins() { - const CommandLine& command_line = *CommandLine::ForCurrentProcess(); --#if defined(OS_LINUX) -+#if defined(OS_LINUX) || defined(OS_FREEBSD) - // Plugin processes require a UI message loop, and the Linux message loop - // implementation only allows one UI loop per process. - if (command_line.HasSwitch(switches::kInProcessPlugins)) -@@ -103,10 +103,10 @@ - // Platform specific code for dealing with bitmap transport... - - TransportDIB* RenderProcessImpl::CreateTransportDIB(size_t size) { --#if defined(OS_WIN) || defined(OS_LINUX) -+#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD) +--- content/renderer/render_process_impl.cc.orig 2010-12-16 02:11:59.000000000 +0100 ++++ content/renderer/render_process_impl.cc 2010-12-20 20:15:08.000000000 +0100 +@@ -243,7 +243,7 @@ + #if defined(OS_WIN) || defined(OS_LINUX) // Windows and Linux create transport DIBs inside the renderer return TransportDIB::Create(size, transport_dib_next_sequence_number_++); -#elif defined(OS_MACOSX) // defined(OS_WIN) || defined(OS_LINUX) -+#elif defined(OS_MACOSX) // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) // defined(OS_WIN) || defined(OS_LINUX) // Mac creates transport DIBs in the browser, so we need to do a sync IPC to // get one. The TransportDIB is cached in the browser. TransportDIB::Handle handle; -@@ -141,7 +141,7 @@ +@@ -260,7 +260,7 @@ + if (!dib) + return; + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // On Mac we need to tell the browser that it can drop a reference to the + // shared memory. + IPC::Message* msg = new ViewHostMsg_FreeTransportDIB(dib->id()); +@@ -278,7 +278,7 @@ int width = rect.width(); int height = rect.height(); const size_t stride = skia::PlatformCanvas::StrideForWidth(rect.width()); diff --git a/www/chromium/files/patch-content__renderer__render_view.cc b/www/chromium/files/patch-content__renderer__render_view.cc new file mode 100644 index 000000000000..71157cce85e5 --- /dev/null +++ b/www/chromium/files/patch-content__renderer__render_view.cc @@ -0,0 +1,29 @@ +--- content/renderer/render_view.cc.orig 2011-08-30 11:58:21.000000000 +0300 ++++ content/renderer/render_view.cc 2011-09-11 22:31:33.000000000 +0300 +@@ -437,7 +437,7 @@ + file_chooser_completions_.pop_front(); + } + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Destroy all fake plugin window handles on the browser side. + while (!fake_plugin_window_handles_.empty()) { + // Make sure no NULL plugin window handles were inserted into this list. +@@ -1522,7 +1522,7 @@ + } + + bool RenderView::isSmartInsertDeleteEnabled() { +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + return true; + #else + return false; +@@ -4187,7 +4187,7 @@ + return true; + } + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + void RenderView::PluginFocusChanged(bool focused, int plugin_id) { + IPC::Message* msg = new ViewHostMsg_PluginFocusChanged(routing_id(), + focused, plugin_id); diff --git a/www/chromium/files/patch-content__renderer__render_view.h b/www/chromium/files/patch-content__renderer__render_view.h new file mode 100644 index 000000000000..17b9d7ca4971 --- /dev/null +++ b/www/chromium/files/patch-content__renderer__render_view.h @@ -0,0 +1,29 @@ +--- content/renderer/render_view.h.orig 2011-09-10 18:40:54.000000000 +0300 ++++ content/renderer/render_view.h 2011-09-10 19:13:46.000000000 +0300 +@@ -312,7 +312,7 @@ + // Request updated policy regarding firewall NAT traversal being enabled. + void RequestRemoteAccessClientFirewallTraversal(); + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Informs the render view that the given plugin has gained or lost focus. + void PluginFocusChanged(bool focused, int plugin_id); + +@@ -654,7 +654,7 @@ + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, OnSetTextDirection); + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, StaleNavigationsIgnored); + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, UpdateTargetURLWithInvalidURL); +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, MacTestCmdUp); + #endif + FRIEND_TEST_ALL_PREFIXES(RenderViewTest, SetHistoryLengthAndPrune); +@@ -1079,7 +1079,7 @@ + // states for the sizes). + base::OneShotTimer<RenderView> check_preferred_size_timer_; + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Track the fake plugin window handles allocated on the browser side for + // the accelerated compositor and (currently) accelerated plugins so that + // we can discard them when the view goes away. diff --git a/www/chromium/files/patch-content__renderer__render_widget.cc b/www/chromium/files/patch-content__renderer__render_widget.cc new file mode 100644 index 000000000000..b5c827ad163a --- /dev/null +++ b/www/chromium/files/patch-content__renderer__render_widget.cc @@ -0,0 +1,11 @@ +--- content/renderer/render_widget.cc.orig 2011-03-23 00:47:39.891641114 +0200 ++++ content/renderer/render_widget.cc 2011-03-23 00:48:36.043641158 +0200 +@@ -888,7 +888,7 @@ + // Close our unused handle. + #if defined(OS_WIN) + ::CloseHandle(dib_handle); +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + base::SharedMemory::CloseHandle(dib_handle); + #endif + } diff --git a/www/chromium/files/patch-content__renderer__webplugin_delegate_proxy.cc b/www/chromium/files/patch-content__renderer__webplugin_delegate_proxy.cc new file mode 100644 index 000000000000..772b38d5ca50 --- /dev/null +++ b/www/chromium/files/patch-content__renderer__webplugin_delegate_proxy.cc @@ -0,0 +1,26 @@ +--- content/renderer/webplugin_delegate_proxy.cc.orig 2011-08-30 11:58:21.000000000 +0300 ++++ content/renderer/webplugin_delegate_proxy.cc 2011-09-11 22:57:59.000000000 +0300 +@@ -494,7 +494,7 @@ + static void CopyTransportDIBHandleForMessage( + const TransportDIB::Handle& handle_in, + TransportDIB::Handle* handle_out) { +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // On Mac, TransportDIB::Handle is typedef'ed to FileDescriptor, and + // FileDescriptor message fields needs to remain valid until the message is + // sent or else the sendmsg() call will fail. +@@ -644,12 +644,12 @@ + scoped_ptr<TransportDIB>* memory, + scoped_ptr<skia::PlatformCanvas>* canvas) { + const size_t size = BitmapSizeForPluginRect(plugin_rect_); +-#if defined(OS_POSIX) && !defined(OS_MACOSX) ++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && !defined(OS_FREEBSD) + memory->reset(TransportDIB::Create(size, 0)); + if (!memory->get()) + return false; + #endif +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_OPENBSD) || defined(OS_FREEBSD) + TransportDIB::Handle handle; + IPC::Message* msg = new ViewHostMsg_AllocTransportDIB(size, false, &handle); + if (!RenderThread::current()->Send(msg)) diff --git a/www/chromium/files/patch-content__renderer__webplugin_delegate_proxy.h b/www/chromium/files/patch-content__renderer__webplugin_delegate_proxy.h new file mode 100644 index 000000000000..d61b89975e60 --- /dev/null +++ b/www/chromium/files/patch-content__renderer__webplugin_delegate_proxy.h @@ -0,0 +1,20 @@ +--- content/renderer/webplugin_delegate_proxy.h.orig 2011-09-11 19:07:19.000000000 +0300 ++++ content/renderer/webplugin_delegate_proxy.h 2011-09-11 19:07:36.000000000 +0300 +@@ -21,7 +21,7 @@ + #include "webkit/plugins/npapi/webplugininfo.h" + #include "webkit/plugins/npapi/webplugin_delegate.h" + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + #include "base/hash_tables.h" + #include "base/memory/linked_ptr.h" + #endif +@@ -243,7 +243,7 @@ + // point the window has already been destroyed). + void WillDestroyWindow(); + +-#if defined(OS_MACOSX) ++#if defined(OS_MACOSX) || defined(OS_FREEBSD) + // Synthesize a fake window handle for the plug-in to identify the instance + // to the browser, allowing mapping to a surface for hardware acceleration + // of plug-in content. The browser generates the handle which is then set on diff --git a/www/chromium/files/patch-ppapi__proxy__ppb_image_data_proxy.cc b/www/chromium/files/patch-ppapi__proxy__ppb_image_data_proxy.cc new file mode 100644 index 000000000000..b4f7bd82abae --- /dev/null +++ b/www/chromium/files/patch-ppapi__proxy__ppb_image_data_proxy.cc @@ -0,0 +1,20 @@ +--- ppapi/proxy/ppb_image_data_proxy.cc.orig 2011-06-28 23:59:12.540806582 +0300 ++++ ppapi/proxy/ppb_image_data_proxy.cc 2011-06-28 23:59:15.075806980 +0300 +@@ -111,7 +111,7 @@ + + #if defined(OS_WIN) + const ImageHandle ImageData::NullHandle = NULL; +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + const ImageHandle ImageData::NullHandle = ImageHandle(); + #else + const ImageHandle ImageData::NullHandle = 0; +@@ -120,7 +120,7 @@ + ImageHandle ImageData::HandleFromInt(int32_t i) { + #if defined(OS_WIN) + return reinterpret_cast<ImageHandle>(i); +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + return ImageHandle(i, false); + #else + return static_cast<ImageHandle>(i); diff --git a/www/chromium/files/patch-ppapi__proxy__serialized_structs.h b/www/chromium/files/patch-ppapi__proxy__serialized_structs.h new file mode 100644 index 000000000000..e23ca7e4adf1 --- /dev/null +++ b/www/chromium/files/patch-ppapi__proxy__serialized_structs.h @@ -0,0 +1,11 @@ +--- ppapi/proxy/serialized_structs.h.orig 2011-06-27 23:46:48.860441060 +0300 ++++ ppapi/proxy/serialized_structs.h 2011-06-27 23:46:52.210441968 +0300 +@@ -115,7 +115,7 @@ + + #if defined(OS_WIN) + typedef HANDLE ImageHandle; +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + typedef base::SharedMemoryHandle ImageHandle; + #else + // On X Windows this is a SysV shared memory key. diff --git a/www/chromium/files/patch-ui__base__x__x11_util.cc b/www/chromium/files/patch-ui__base__x__x11_util.cc index 7e54bebb7d52..2d4868d87d3e 100644 --- a/www/chromium/files/patch-ui__base__x__x11_util.cc +++ b/www/chromium/files/patch-ui__base__x__x11_util.cc @@ -1,6 +1,19 @@ ---- ui/base/x/x11_util.cc.orig 2011-09-21 11:09:03.000000000 +0300 -+++ ui/base/x/x11_util.cc 2011-09-21 11:10:13.000000000 +0300 -@@ -112,8 +112,6 @@ +--- ui/base/x/x11_util.cc.orig 2011-10-12 12:02:46.000000000 +0300 ++++ ui/base/x/x11_util.cc 2011-10-16 17:17:46.000000000 +0300 +@@ -103,6 +103,12 @@ + static SharedMemorySupport DoQuerySharedMemorySupport(Display* dpy) { + int dummy; + Bool pixmaps_supported; ++ ++#if defined(OS_FREEBSD) ++ if (!CommandLine::ForCurrentProcess()->HasSwitch("enable-xshm")) ++ return SHARED_MEMORY_NONE; ++#endif ++ + // Query the server's support for XSHM. + if (!XShmQueryVersion(dpy, &dummy, &dummy, &pixmaps_supported)) + return SHARED_MEMORY_NONE; +@@ -112,8 +118,6 @@ if (shmkey == -1) return SHARED_MEMORY_NONE; void* address = shmat(shmkey, NULL, 0); @@ -9,7 +22,7 @@ XShmSegmentInfo shminfo; memset(&shminfo, 0, sizeof(shminfo)); -@@ -125,6 +123,7 @@ +@@ -125,6 +129,7 @@ if (gdk_error_trap_pop()) result = false; shmdt(address); diff --git a/www/chromium/files/patch-ui__gfx__surface__surface.gyp b/www/chromium/files/patch-ui__gfx__surface__surface.gyp new file mode 100644 index 000000000000..7fd590484503 --- /dev/null +++ b/www/chromium/files/patch-ui__gfx__surface__surface.gyp @@ -0,0 +1,17 @@ +--- ui/gfx/surface/surface.gyp.orig 2011-09-09 21:37:36.000000000 +0300 ++++ ui/gfx/surface/surface.gyp 2011-09-09 21:45:23.000000000 +0300 +@@ -14,6 +14,14 @@ + '<(DEPTH)/third_party/angle/include', + ], + }], ++ ['OS == "freebsd"', { ++ 'sources!': [ ++ 'transport_dib_linux.cc', ++ ], ++ 'sources': [ ++ 'transport_dib_freebsd.cc', ++ ], ++ }], + ], + }, + 'targets': [ diff --git a/www/chromium/files/patch-ui__gfx__surface__transport_dib.h b/www/chromium/files/patch-ui__gfx__surface__transport_dib.h new file mode 100644 index 000000000000..4165a37e33bd --- /dev/null +++ b/www/chromium/files/patch-ui__gfx__surface__transport_dib.h @@ -0,0 +1,44 @@ +--- ui/gfx/surface/transport_dib.h.orig 2011-05-06 12:03:42.000000000 +0300 ++++ ui/gfx/surface/transport_dib.h 2011-06-05 21:06:20.559165060 +0300 +@@ -8,7 +8,7 @@ + + #include "base/basictypes.h" + +-#if defined(OS_WIN) || defined(OS_MACOSX) ++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_FREEBSD) + #include "base/shared_memory.h" + #endif + +@@ -78,7 +78,7 @@ + static int fake_handle = 10; + return reinterpret_cast<Handle>(fake_handle++); + } +-#elif defined(OS_MACOSX) ++#elif defined(OS_MACOSX) || defined(OS_FREEBSD) + typedef base::SharedMemoryHandle Handle; + // On Mac, the inode number of the backing file is used as an id. + typedef base::SharedMemoryId Id; +@@ -93,7 +93,7 @@ + static int fake_handle = 10; + return Handle(fake_handle++, false); + } +-#elif defined(USE_X11) ++#elif defined(OS_LINUX) + typedef int Handle; // These two ints are SysV IPC shared memory keys + struct Id { + // Ensure that default initialized Ids are invalid. +@@ -184,11 +184,12 @@ + + private: + TransportDIB(); +-#if defined(OS_WIN) || defined(OS_MACOSX) ++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_FREEBSD) + explicit TransportDIB(base::SharedMemoryHandle dib); + base::SharedMemory shared_memory_; + uint32 sequence_num_; +-#elif defined(USE_X11) ++#endif ++#if defined(USE_X11) + Id key_; // SysV shared memory id + void* address_; // mapped address + XSharedMemoryId x_shm_; // X id for the shared segment diff --git a/www/chromium/files/patch-ui__gfx__surface__transport_dib_freebsd.cc b/www/chromium/files/patch-ui__gfx__surface__transport_dib_freebsd.cc new file mode 100644 index 000000000000..8d1eb2332774 --- /dev/null +++ b/www/chromium/files/patch-ui__gfx__surface__transport_dib_freebsd.cc @@ -0,0 +1,110 @@ +--- /dev/null 2011-06-28 23:33:00.000000000 +0300 ++++ ui/gfx/surface/transport_dib_freebsd.cc 2011-06-28 23:30:26.428806593 +0300 +@@ -0,0 +1,107 @@ ++// Copyright (c) 2011 The Chromium Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++#include "ui/gfx/surface/transport_dib.h" ++ ++#include <unistd.h> ++#include <sys/stat.h> ++ ++#include "base/eintr_wrapper.h" ++#include "base/logging.h" ++#include "base/memory/scoped_ptr.h" ++#include "base/shared_memory.h" ++#include "skia/ext/platform_canvas.h" ++ ++TransportDIB::TransportDIB() ++ : size_(0) { ++} ++ ++TransportDIB::TransportDIB(TransportDIB::Handle dib) ++ : shared_memory_(dib, false /* read write */), ++ size_(0) { ++} ++ ++TransportDIB::~TransportDIB() { ++} ++ ++// static ++TransportDIB* TransportDIB::Create(size_t size, uint32 sequence_num) { ++ TransportDIB* dib = new TransportDIB; ++ if (!dib->shared_memory_.CreateAndMapAnonymous(size)) { ++ delete dib; ++ return NULL; ++ } ++ ++ dib->size_ = size; ++ return dib; ++} ++ ++// static ++TransportDIB* TransportDIB::Map(Handle handle) { ++ scoped_ptr<TransportDIB> dib(CreateWithHandle(handle)); ++ if (!dib->Map()) ++ return NULL; ++ return dib.release(); ++} ++ ++// static ++TransportDIB* TransportDIB::CreateWithHandle(Handle handle) { ++ return new TransportDIB(handle); ++} ++ ++// static ++bool TransportDIB::is_valid_handle(Handle dib) { ++ return dib.fd >= 0; ++} ++ ++// static ++bool TransportDIB::is_valid_id(Id id) { ++ return id != 0; ++} ++ ++skia::PlatformCanvas* TransportDIB::GetPlatformCanvas(int w, int h) { ++ if (!memory() && !Map()) ++ return NULL; ++ scoped_ptr<skia::PlatformCanvas> canvas(new skia::PlatformCanvas); ++ if (!canvas->initialize(w, h, true, reinterpret_cast<uint8_t*>(memory()))) ++ return NULL; ++ return canvas.release(); ++} ++ ++bool TransportDIB::Map() { ++ if (!is_valid_handle(handle())) ++ return false; ++ if (memory()) ++ return true; ++ ++ struct stat st; ++ if ((fstat(shared_memory_.handle().fd, &st) != 0) || ++ (!shared_memory_.Map(st.st_size))) { ++ return false; ++ } ++ ++ size_ = st.st_size; ++ return true; ++} ++ ++void* TransportDIB::memory() const { ++ return shared_memory_.memory(); ++} ++ ++TransportDIB::Id TransportDIB::id() const { ++ return shared_memory_.id(); ++} ++ ++TransportDIB::Handle TransportDIB::handle() const { ++ return shared_memory_.handle(); ++} ++ ++XID TransportDIB::MapToX(Display* display) { ++ if (!x_shm_) { ++ x_shm_ = ui::AttachSharedMemory(display, key_); ++ display_ = display; ++ } ++ ++ return x_shm_; ++} |