summaryrefslogtreecommitdiff
path: root/Source/WebKit2
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2')
-rw-r--r--Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp40
-rw-r--r--Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp2
-rw-r--r--Source/WebKit2/WebKit2.pri2
3 files changed, 42 insertions, 2 deletions
diff --git a/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp b/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp
index 760a8ab1c..6a4d52792 100644
--- a/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp
+++ b/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp
@@ -44,6 +44,10 @@
#include <wtf/UniStdExtras.h>
#include <wtf/text/CString.h>
+#if OS(ANDROID)
+#include <linux/ashmem.h>
+#endif
+
namespace WebKit {
SharedMemory::Handle::Handle()
@@ -97,6 +101,41 @@ void SharedMemory::Handle::adoptFromAttachment(int fileDescriptor, size_t size)
m_size = size;
}
+#if OS(ANDROID)
+PassRefPtr<SharedMemory> SharedMemory::create(size_t size)
+{
+ int fileDescriptor = open("/dev/ashmem", O_RDWR);
+ if (fileDescriptor < 0) {
+ WTFLogAlways("Failed to open ashmem device");
+ return 0;
+ }
+
+ String name = String("/WK2SharedMemory.") + String::number(static_cast<unsigned>(WTF::randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0)));
+ char buf[ASHMEM_NAME_LEN];
+ strlcpy(buf,name.utf8().data(), sizeof(buf));
+ // Ashmem names does not need to be unique.
+ ioctl(fileDescriptor, ASHMEM_SET_NAME, buf);
+
+ int ret = ioctl(fileDescriptor, ASHMEM_SET_SIZE, size);
+ if (ret < 0) {
+ closeWithRetry(fileDescriptor);
+ WTFLogAlways("Failed to create shared memory of size %d", size);
+ return 0;
+ }
+
+ void* data = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fileDescriptor, 0);
+ if (data == MAP_FAILED) {
+ closeWithRetry(fileDescriptor);
+ return 0;
+ }
+
+ RefPtr<SharedMemory> instance = adoptRef(new SharedMemory());
+ instance->m_data = data;
+ instance->m_fileDescriptor = fileDescriptor;
+ instance->m_size = size;
+ return instance.release();
+}
+#else
PassRefPtr<SharedMemory> SharedMemory::create(size_t size)
{
CString tempName;
@@ -138,6 +177,7 @@ PassRefPtr<SharedMemory> SharedMemory::create(size_t size)
instance->m_size = size;
return instance.release();
}
+#endif
static inline int accessModeMMap(SharedMemory::Protection protection)
{
diff --git a/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp b/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp
index 128379f26..01ea5e6bd 100644
--- a/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp
+++ b/Source/WebKit2/UIProcess/qt/WebPopupMenuProxyQt.cpp
@@ -250,7 +250,7 @@ void PopupMenuItemModel::buildItems(const Vector<WebPopupItem>& webPopupItems)
{
QString currentGroup;
m_items.reserveInitialCapacity(webPopupItems.size());
- for (int i = 0; i < webPopupItems.size(); i++) {
+ for (size_t i = 0; i < webPopupItems.size(); i++) {
const WebPopupItem& webPopupItem = webPopupItems[i];
if (webPopupItem.m_isLabel) {
currentGroup = webPopupItem.m_text;
diff --git a/Source/WebKit2/WebKit2.pri b/Source/WebKit2/WebKit2.pri
index cf154cc19..e8d4b80d0 100644
--- a/Source/WebKit2/WebKit2.pri
+++ b/Source/WebKit2/WebKit2.pri
@@ -75,7 +75,7 @@ INCLUDEPATH += $${ROOT_WEBKIT_DIR}/Source/WTF/wtf/qt
INCLUDEPATH += $$WEBKIT2_GENERATED_SOURCES_DIR
-linux-*: {
+linux-*:!android {
# -lrt is required for shm_open and shm_unlink.
LIBS += -lrt
}