Diff
Modified: trunk/Source/WebKit2/ChangeLog (141164 => 141165)
--- trunk/Source/WebKit2/ChangeLog 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/ChangeLog 2013-01-29 22:24:55 UTC (rev 141165)
@@ -1,5 +1,44 @@
2013-01-29 Anders Carlsson <ander...@apple.com>
+ Start using the message flag in MessageEncoder/MessageDecoder
+ https://bugs.webkit.org/show_bug.cgi?id=108227
+
+ Reviewed by Beth Dakin.
+
+ Stop using the flags in MessageID and store the flags directly in the message instead.
+ This is another step towards eliminating MessageID.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
+ (CoreIPC::Connection::createSyncMessageEncoder):
+ (CoreIPC::Connection::sendMessage):
+ (CoreIPC::Connection::sendSyncMessage):
+ (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
+ (CoreIPC::Connection::dispatchSyncMessage):
+ (CoreIPC::Connection::dispatchMessage):
+ * Platform/CoreIPC/Connection.h:
+ * Platform/CoreIPC/MessageDecoder.cpp:
+ (CoreIPC::MessageDecoder::MessageDecoder):
+ (CoreIPC::MessageDecoder::isSyncMessage):
+ (CoreIPC):
+ (CoreIPC::MessageDecoder::shouldDispatchMessageWhenWaitingForSyncReply):
+ * Platform/CoreIPC/MessageDecoder.h:
+ (MessageDecoder):
+ * Platform/CoreIPC/MessageEncoder.cpp:
+ (CoreIPC):
+ (CoreIPC::MessageEncoder::MessageEncoder):
+ (CoreIPC::MessageEncoder::~MessageEncoder):
+ (CoreIPC::MessageEncoder::setIsSyncMessage):
+ (CoreIPC::MessageEncoder::setShouldDispatchMessageWhenWaitingForSyncReply):
+ * Platform/CoreIPC/MessageEncoder.h:
+ (MessageEncoder):
+ * Platform/CoreIPC/MessageFlags.h: Copied from Source/WebKit2/Platform/CoreIPC/MessageEncoder.h.
+ (CoreIPC):
+ * Platform/CoreIPC/MessageID.h:
+ * WebKit2.xcodeproj/project.pbxproj:
+
+2013-01-29 Anders Carlsson <ander...@apple.com>
+
Encode/decode message send flags in the message
https://bugs.webkit.org/show_bug.cgi?id=108208
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2013-01-29 22:24:55 UTC (rev 141165)
@@ -135,8 +135,7 @@
bool Connection::SyncMessageState::processIncomingMessage(Connection* connection, IncomingMessage& incomingMessage)
{
- MessageID messageID = incomingMessage.messageID();
- if (!messageID.shouldDispatchMessageWhenWaitingForSyncReply())
+ if (!incomingMessage.arguments()->shouldDispatchMessageWhenWaitingForSyncReply())
return false;
ConnectionAndIncomingMessage connectionAndIncomingMessage;
@@ -306,6 +305,7 @@
PassOwnPtr<MessageEncoder> Connection::createSyncMessageEncoder(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, uint64_t& syncRequestID)
{
OwnPtr<MessageEncoder> encoder = MessageEncoder::create(messageReceiverName, messageName, destinationID);
+ encoder->setIsSyncMessage(true);
// Encode the sync request ID.
COMPILE_ASSERT(sizeof(m_syncRequestID) == sizeof(int64_t), CanUseAtomicIncrement);
@@ -317,15 +317,13 @@
bool Connection::sendMessage(MessageID messageID, PassOwnPtr<MessageEncoder> encoder, unsigned messageSendFlags)
{
- encoder->setMessageSendFlags(messageSendFlags);
-
if (!isValid())
return false;
if (messageSendFlags & DispatchMessageEvenWhenWaitingForSyncReply
&& (!m_onlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage
|| m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount))
- messageID = messageID.messageIDWithAddedFlags(MessageID::DispatchMessageWhenWaitingForSyncReply);
+ encoder->setShouldDispatchMessageWhenWaitingForSyncReply(true);
{
MutexLocker locker(m_outgoingMessagesLock);
@@ -423,7 +421,7 @@
}
// First send the message.
- sendMessage(messageID.messageIDWithAddedFlags(MessageID::SyncMessage), encoder, DispatchMessageEvenWhenWaitingForSyncReply);
+ sendMessage(messageID, encoder, DispatchMessageEvenWhenWaitingForSyncReply);
// Then wait for a reply. Waiting for a reply could involve dispatching incoming sync messages, so
// keep an extra reference to the connection here in case it's invalidated.
@@ -462,7 +460,7 @@
m_secondaryThreadPendingSyncReplyMap.add(syncRequestID, &pendingReply);
}
- sendMessage(messageID.messageIDWithAddedFlags(MessageID::SyncMessage), encoder, 0);
+ sendMessage(messageID, encoder, 0);
// Use a really long timeout.
if (timeout == NoTimeout)
@@ -686,7 +684,7 @@
void Connection::dispatchSyncMessage(MessageID messageID, MessageDecoder& decoder)
{
- ASSERT(messageID.isSync());
+ ASSERT(decoder.isSyncMessage());
uint64_t syncRequestID = 0;
if (!decoder.decodeUInt64(syncRequestID) || !syncRequestID) {
@@ -741,13 +739,13 @@
m_inDispatchMessageCount++;
- if (message.messageID().shouldDispatchMessageWhenWaitingForSyncReply())
+ if (arguments->shouldDispatchMessageWhenWaitingForSyncReply())
m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount++;
bool oldDidReceiveInvalidMessage = m_didReceiveInvalidMessage;
m_didReceiveInvalidMessage = false;
- if (message.messageID().isSync())
+ if (arguments->isSyncMessage())
dispatchSyncMessage(message.messageID(), *arguments);
else
dispatchMessage(message.messageID(), *arguments);
@@ -755,7 +753,7 @@
m_didReceiveInvalidMessage |= arguments->isInvalid();
m_inDispatchMessageCount--;
- if (message.messageID().shouldDispatchMessageWhenWaitingForSyncReply())
+ if (arguments->shouldDispatchMessageWhenWaitingForSyncReply())
m_inDispatchMessageMarkedDispatchWhenWaitingForSyncReplyCount--;
if (m_didReceiveInvalidMessage && m_client)
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-01-29 22:24:55 UTC (rev 141165)
@@ -69,7 +69,7 @@
};
enum SyncMessageSendFlags {
- // Will allow events to continue being handled while waiting for the synch reply.
+ // Will allow events to continue being handled while waiting for the sync reply.
SpinRunLoopWhileWaitingForReply = 1 << 0,
};
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.cpp (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.cpp 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.cpp 2013-01-29 22:24:55 UTC (rev 141165)
@@ -28,6 +28,7 @@
#include "ArgumentCoders.h"
#include "DataReference.h"
+#include "MessageFlags.h"
#include "StringReference.h"
namespace CoreIPC {
@@ -50,7 +51,7 @@
MessageDecoder::MessageDecoder(const DataReference& buffer, Deque<Attachment>& attachments)
: ArgumentDecoder(buffer.data(), buffer.size(), attachments)
{
- if (!decodeUInt8(m_messageSendFlags))
+ if (!decodeUInt8(m_messageFlags))
return;
if (!decode(m_messageReceiverName))
@@ -62,4 +63,14 @@
decodeUInt64(m_destinationID);
}
+bool MessageDecoder::isSyncMessage() const
+{
+ return m_messageFlags & SyncMessage;
+}
+
+bool MessageDecoder::shouldDispatchMessageWhenWaitingForSyncReply() const
+{
+ return m_messageFlags & DispatchMessageWhenWaitingForSyncReply;
+}
+
} // namespace CoreIPC
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.h (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.h 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageDecoder.h 2013-01-29 22:24:55 UTC (rev 141165)
@@ -39,14 +39,16 @@
static PassOwnPtr<MessageDecoder> create(const DataReference& buffer, Deque<Attachment>&);
virtual ~MessageDecoder();
- uint8_t messageSendFlags() const { return m_messageSendFlags; }
StringReference messageReceiverName() const { return m_messageReceiverName; }
StringReference messageName() const { return m_messageName; }
+ bool isSyncMessage() const;
+ bool shouldDispatchMessageWhenWaitingForSyncReply() const;
+
private:
MessageDecoder(const DataReference& buffer, Deque<Attachment>&);
- uint8_t m_messageSendFlags;
+ uint8_t m_messageFlags;
StringReference m_messageReceiverName;
StringReference m_messageName;
};
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.cpp (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.cpp 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.cpp 2013-01-29 22:24:55 UTC (rev 141165)
@@ -27,11 +27,12 @@
#include "MessageEncoder.h"
#include "ArgumentCoders.h"
+#include "MessageFlags.h"
#include "StringReference.h"
namespace CoreIPC {
-static uint8_t messageSendFlagsPlaceholderValue = 0xff;
+static uint8_t defaultMessageFlags = 0;
PassOwnPtr<MessageEncoder> MessageEncoder::create(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID)
{
@@ -42,7 +43,7 @@
{
ASSERT(!messageReceiverName.isEmpty());
- encode(messageSendFlagsPlaceholderValue);
+ encode(defaultMessageFlags);
encode(messageReceiverName);
encode(messageName);
encode(destinationID);
@@ -50,15 +51,23 @@
MessageEncoder::~MessageEncoder()
{
- ASSERT(*buffer() != messageSendFlagsPlaceholderValue);
}
-void MessageEncoder::setMessageSendFlags(uint8_t messageSendFlags)
+void MessageEncoder::setIsSyncMessage(bool isSyncMessage)
{
- ASSERT(messageSendFlags != messageSendFlagsPlaceholderValue);
- ASSERT(*buffer() == messageSendFlagsPlaceholderValue);
+ if (isSyncMessage)
+ *buffer() |= SyncMessage;
+ else
+ *buffer() &= ~SyncMessage;
- *buffer() = messageSendFlags;
}
+void MessageEncoder::setShouldDispatchMessageWhenWaitingForSyncReply(bool shouldDispatchMessageWhenWaitingForSyncReply)
+{
+ if (shouldDispatchMessageWhenWaitingForSyncReply)
+ *buffer() |= DispatchMessageWhenWaitingForSyncReply;
+ else
+ *buffer() &= ~DispatchMessageWhenWaitingForSyncReply;
+}
+
} // namespace CoreIPC
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.h (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.h 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.h 2013-01-29 22:24:55 UTC (rev 141165)
@@ -38,7 +38,8 @@
static PassOwnPtr<MessageEncoder> create(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID);
virtual ~MessageEncoder();
- void setMessageSendFlags(uint8_t);
+ void setIsSyncMessage(bool);
+ void setShouldDispatchMessageWhenWaitingForSyncReply(bool);
private:
MessageEncoder(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID);
Copied: trunk/Source/WebKit2/Platform/CoreIPC/MessageFlags.h (from rev 141150, trunk/Source/WebKit2/Platform/CoreIPC/MessageEncoder.h) (0 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageFlags.h (rev 0)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageFlags.h 2013-01-29 22:24:55 UTC (rev 141165)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef MessageFlags_h
+#define MessageFlags_h
+
+namespace CoreIPC {
+
+enum MessageFlags {
+ SyncMessage = 1 << 0,
+ DispatchMessageWhenWaitingForSyncReply = 1 << 1,
+};
+
+} // namespace CoreIPC
+
+#endif // MessageFlags_h
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageID.h (141164 => 141165)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageID.h 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageID.h 2013-01-29 22:24:55 UTC (rev 141165)
@@ -161,11 +161,6 @@
class MessageID {
public:
- enum Flags {
- SyncMessage = 1 << 0,
- DispatchMessageWhenWaitingForSyncReply = 1 << 1,
- };
-
MessageID()
: m_messageID(0)
{
@@ -177,14 +172,6 @@
{
}
- MessageID messageIDWithAddedFlags(unsigned char flags)
- {
- MessageID messageID;
-
- messageID.m_messageID = stripMostSignificantBit(m_messageID | (flags << 24));
- return messageID;
- }
-
template <typename EnumType>
EnumType get() const
{
@@ -209,9 +196,6 @@
unsigned toInt() const { return m_messageID; }
- bool shouldDispatchMessageWhenWaitingForSyncReply() const { return getFlags() & DispatchMessageWhenWaitingForSyncReply; }
- bool isSync() const { return getFlags() & SyncMessage; }
-
private:
static inline unsigned stripMostSignificantBit(unsigned value)
{
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (141164 => 141165)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2013-01-29 22:14:14 UTC (rev 141164)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2013-01-29 22:24:55 UTC (rev 141165)
@@ -239,6 +239,7 @@
1AC25FC212A48F6000BD2671 /* PluginProcessShim.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AC25F8A12A48E0300BD2671 /* PluginProcessShim.mm */; };
1AC41AC71263C88300054E94 /* BinarySemaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC41AC51263C88300054E94 /* BinarySemaphore.h */; };
1AC41AC81263C88300054E94 /* BinarySemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC41AC61263C88300054E94 /* BinarySemaphore.cpp */; };
+ 1AC4C82916B876A90069DCCD /* MessageFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC4C82816B876A90069DCCD /* MessageFlags.h */; };
1AC86FF3130B46D3002C1257 /* WKPluginSiteDataManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC86FF1130B46D3002C1257 /* WKPluginSiteDataManager.cpp */; };
1AC86FF4130B46D3002C1257 /* WKPluginSiteDataManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC86FF2130B46D3002C1257 /* WKPluginSiteDataManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
1AC8702D130B49A2002C1257 /* WebPluginSiteDataManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC8702B130B49A2002C1257 /* WebPluginSiteDataManager.h */; };
@@ -1523,6 +1524,7 @@
1AC25FB012A48EA700BD2671 /* PluginProcessShim.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = PluginProcessShim.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
1AC41AC51263C88300054E94 /* BinarySemaphore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BinarySemaphore.h; sourceTree = "<group>"; };
1AC41AC61263C88300054E94 /* BinarySemaphore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BinarySemaphore.cpp; sourceTree = "<group>"; };
+ 1AC4C82816B876A90069DCCD /* MessageFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageFlags.h; sourceTree = "<group>"; };
1AC86FF1130B46D3002C1257 /* WKPluginSiteDataManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKPluginSiteDataManager.cpp; sourceTree = "<group>"; };
1AC86FF2130B46D3002C1257 /* WKPluginSiteDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPluginSiteDataManager.h; sourceTree = "<group>"; };
1AC8702B130B49A2002C1257 /* WebPluginSiteDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPluginSiteDataManager.h; sourceTree = "<group>"; };
@@ -3115,6 +3117,7 @@
1A232901162C867300D82F7A /* MessageDecoder.h */,
1A2328FC162C866A00D82F7A /* MessageEncoder.cpp */,
1A2328FD162C866A00D82F7A /* MessageEncoder.h */,
+ 1AC4C82816B876A90069DCCD /* MessageFlags.h */,
BC032DA410F437D10058C15A /* MessageID.h */,
1A3EED11161A53D600AEB4F5 /* MessageReceiver.h */,
1A3EED0C161A535300AEB4F5 /* MessageReceiverMap.cpp */,
@@ -5328,6 +5331,7 @@
BC82837A16B36A4F00A278FE /* ChildProcessMain.h in Headers */,
BCBECDE816B6416800047A1A /* XPCServiceEntryPoint.h in Headers */,
A5EFD38C16B0E88C00B2F0E8 /* WKPageVisibilityTypes.h in Headers */,
+ 1AC4C82916B876A90069DCCD /* MessageFlags.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};