165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef MessageID_h 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define MessageID_h 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace CoreIPC { 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochenum MessageClass { 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassReserved = 0, 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by Core IPC. 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassCoreIPC, 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by the UI process to the web process. 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassAuthenticationManager, 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassDrawingArea, 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassDrawingAreaLegacy, 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassInjectedBundle, 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebApplicationCacheManager, 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebCookieManager, 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebDatabaseManager, 452bde8e466a4451c7319e3a072d118917957d6554Steve Block MessageClassWebFullScreenManager, 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebGeolocationManagerProxy, 472bde8e466a4451c7319e3a072d118917957d6554Steve Block MessageClassWebIconDatabaseProxy, 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebInspector, 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebKeyValueStorageManager, 502bde8e466a4451c7319e3a072d118917957d6554Steve Block MessageClassWebMediaCacheManager, 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebPage, 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebProcess, 5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebResourceCacheManager, 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by the web process to the UI process. 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassDownloadProxy, 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassDrawingAreaProxy, 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassDrawingAreaProxyLegacy, 5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebApplicationCacheManagerProxy, 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebContext, 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebContextLegacy, 6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebCookieManagerProxy, 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebDatabaseManagerProxy, 642bde8e466a4451c7319e3a072d118917957d6554Steve Block MessageClassWebFullScreenManagerProxy, 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebGeolocationManager, 662bde8e466a4451c7319e3a072d118917957d6554Steve Block MessageClassWebIconDatabase, 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebInspectorProxy, 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebKeyValueStorageManagerProxy, 692bde8e466a4451c7319e3a072d118917957d6554Steve Block MessageClassWebMediaCacheManagerProxy, 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebPageProxy, 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebProcessProxy, 7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch MessageClassWebResourceCacheManagerProxy, 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by the UI process to the plug-in process. 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassPluginProcess, 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by the plug-in process to the UI process. 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassPluginProcessProxy, 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by the web process to the plug-in process. 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassWebProcessConnection, 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassPluginControllerProxy, 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Messages sent by the plug-in process to the web process. 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassPluginProxy, 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // NPObject messages sent by both the plug-in process and the web process. 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageClassNPObjectMessageReceiver, 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}; 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtemplate<typename> struct MessageKindTraits { }; 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageID Layout (the most significant bit is reserved and therefore always zero) 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch --------- 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch | Flags | 7 bits 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch |-------| 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch | Class | 8 bits 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch |-------| 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch | Msg | 16 bits 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch | Kind | 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch --------- 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch*/ 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass MessageID { 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic: 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch enum Flags { 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch SyncMessage = 1 << 0, 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DispatchMessageWhenWaitingForSyncReply = 1 << 1, 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch }; 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageID() 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_messageID(0) 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch template <typename EnumType> 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch explicit MessageID(EnumType messageKind, unsigned char flags = 0) 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_messageID(stripMostSignificantBit(flags << 24 | (MessageKindTraits<EnumType>::messageClass) << 16 | messageKind)) 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block MessageID messageIDWithAddedFlags(unsigned char flags) 1262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 1272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block MessageID messageID; 1282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block messageID.m_messageID = stripMostSignificantBit(m_messageID | (flags << 24)); 1302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return messageID; 1312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch template <typename EnumType> 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch EnumType get() const 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(getClass() == MessageKindTraits<EnumType>::messageClass); 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<EnumType>(m_messageID & 0xffff); 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch template <MessageClass K> 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool is() const 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return getClass() == K; 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch template <typename EnumType> 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool operator==(EnumType messageKind) const 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_messageID == MessageID(messageKind).m_messageID; 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static MessageID fromInt(unsigned i) 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MessageID messageID; 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch messageID.m_messageID = stripMostSignificantBit(i); 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return messageID; 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned toInt() const { return m_messageID; } 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block bool shouldDispatchMessageWhenWaitingForSyncReply() const { return getFlags() & DispatchMessageWhenWaitingForSyncReply; } 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool isSync() const { return getFlags() & SyncMessage; } 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprivate: 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static inline unsigned stripMostSignificantBit(unsigned value) 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch { 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return value & 0x7fffffff; 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned char getFlags() const { return (m_messageID & 0xff000000) >> 24; } 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned char getClass() const { return (m_messageID & 0x00ff0000) >> 16; } 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned m_messageID; 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}; 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace CoreIPC 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // MessageID_h 180