nsGUIEventIPC.h 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360
  1. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this
  4. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. #ifndef nsGUIEventIPC_h__
  6. #define nsGUIEventIPC_h__
  7. #include "ipc/IPCMessageUtils.h"
  8. #include "mozilla/ContentCache.h"
  9. #include "mozilla/GfxMessageUtils.h"
  10. #include "mozilla/dom/Touch.h"
  11. #include "mozilla/MiscEvents.h"
  12. #include "mozilla/MouseEvents.h"
  13. #include "mozilla/TextEvents.h"
  14. #include "mozilla/TouchEvents.h"
  15. #include "InputData.h"
  16. namespace IPC
  17. {
  18. template<>
  19. struct ParamTraits<mozilla::EventMessage>
  20. {
  21. typedef mozilla::EventMessage paramType;
  22. static void Write(Message* aMsg, const paramType& aParam)
  23. {
  24. WriteParam(aMsg, static_cast<const mozilla::EventMessageType&>(aParam));
  25. }
  26. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  27. {
  28. mozilla::EventMessageType eventMessage = 0;
  29. bool ret = ReadParam(aMsg, aIter, &eventMessage);
  30. *aResult = static_cast<paramType>(eventMessage);
  31. return ret;
  32. }
  33. };
  34. template<>
  35. struct ParamTraits<mozilla::BaseEventFlags>
  36. {
  37. typedef mozilla::BaseEventFlags paramType;
  38. static void Write(Message* aMsg, const paramType& aParam)
  39. {
  40. aMsg->WriteBytes(&aParam, sizeof(aParam));
  41. }
  42. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  43. {
  44. return aMsg->ReadBytesInto(aIter, aResult, sizeof(*aResult));
  45. }
  46. };
  47. template<>
  48. struct ParamTraits<mozilla::WidgetEvent>
  49. {
  50. typedef mozilla::WidgetEvent paramType;
  51. static void Write(Message* aMsg, const paramType& aParam)
  52. {
  53. WriteParam(aMsg,
  54. static_cast<mozilla::EventClassIDType>(aParam.mClass));
  55. WriteParam(aMsg, aParam.mMessage);
  56. WriteParam(aMsg, aParam.mRefPoint);
  57. WriteParam(aMsg, aParam.mTime);
  58. WriteParam(aMsg, aParam.mTimeStamp);
  59. WriteParam(aMsg, aParam.mFlags);
  60. }
  61. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  62. {
  63. mozilla::EventClassIDType eventClassID = 0;
  64. bool ret = ReadParam(aMsg, aIter, &eventClassID) &&
  65. ReadParam(aMsg, aIter, &aResult->mMessage) &&
  66. ReadParam(aMsg, aIter, &aResult->mRefPoint) &&
  67. ReadParam(aMsg, aIter, &aResult->mTime) &&
  68. ReadParam(aMsg, aIter, &aResult->mTimeStamp) &&
  69. ReadParam(aMsg, aIter, &aResult->mFlags);
  70. aResult->mClass = static_cast<mozilla::EventClassID>(eventClassID);
  71. return ret;
  72. }
  73. };
  74. template<>
  75. struct ParamTraits<mozilla::NativeEventData>
  76. {
  77. typedef mozilla::NativeEventData paramType;
  78. static void Write(Message* aMsg, const paramType& aParam)
  79. {
  80. WriteParam(aMsg, aParam.mBuffer);
  81. }
  82. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  83. {
  84. return ReadParam(aMsg, aIter, &aResult->mBuffer);
  85. }
  86. };
  87. template<>
  88. struct ParamTraits<mozilla::WidgetGUIEvent>
  89. {
  90. typedef mozilla::WidgetGUIEvent paramType;
  91. static void Write(Message* aMsg, const paramType& aParam)
  92. {
  93. WriteParam(aMsg, static_cast<mozilla::WidgetEvent>(aParam));
  94. WriteParam(aMsg, aParam.mPluginEvent);
  95. }
  96. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  97. {
  98. return ReadParam(aMsg, aIter, static_cast<mozilla::WidgetEvent*>(aResult)) &&
  99. ReadParam(aMsg, aIter, &aResult->mPluginEvent);
  100. }
  101. };
  102. template<>
  103. struct ParamTraits<mozilla::WidgetInputEvent>
  104. {
  105. typedef mozilla::WidgetInputEvent paramType;
  106. static void Write(Message* aMsg, const paramType& aParam)
  107. {
  108. WriteParam(aMsg, static_cast<mozilla::WidgetGUIEvent>(aParam));
  109. WriteParam(aMsg, aParam.mModifiers);
  110. }
  111. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  112. {
  113. return ReadParam(aMsg, aIter,
  114. static_cast<mozilla::WidgetGUIEvent*>(aResult)) &&
  115. ReadParam(aMsg, aIter, &aResult->mModifiers);
  116. }
  117. };
  118. template<>
  119. struct ParamTraits<mozilla::WidgetMouseEventBase>
  120. {
  121. typedef mozilla::WidgetMouseEventBase paramType;
  122. static void Write(Message* aMsg, const paramType& aParam)
  123. {
  124. WriteParam(aMsg, static_cast<mozilla::WidgetInputEvent>(aParam));
  125. WriteParam(aMsg, aParam.button);
  126. WriteParam(aMsg, aParam.buttons);
  127. WriteParam(aMsg, aParam.pressure);
  128. WriteParam(aMsg, aParam.hitCluster);
  129. WriteParam(aMsg, aParam.inputSource);
  130. }
  131. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  132. {
  133. return ReadParam(aMsg, aIter,
  134. static_cast<mozilla::WidgetInputEvent*>(aResult)) &&
  135. ReadParam(aMsg, aIter, &aResult->button) &&
  136. ReadParam(aMsg, aIter, &aResult->buttons) &&
  137. ReadParam(aMsg, aIter, &aResult->pressure) &&
  138. ReadParam(aMsg, aIter, &aResult->hitCluster) &&
  139. ReadParam(aMsg, aIter, &aResult->inputSource);
  140. }
  141. };
  142. template<>
  143. struct ParamTraits<mozilla::WidgetWheelEvent>
  144. {
  145. typedef mozilla::WidgetWheelEvent paramType;
  146. static void Write(Message* aMsg, const paramType& aParam)
  147. {
  148. WriteParam(aMsg, static_cast<mozilla::WidgetMouseEventBase>(aParam));
  149. WriteParam(aMsg, aParam.mDeltaX);
  150. WriteParam(aMsg, aParam.mDeltaY);
  151. WriteParam(aMsg, aParam.mDeltaZ);
  152. WriteParam(aMsg, aParam.mDeltaMode);
  153. WriteParam(aMsg, aParam.mCustomizedByUserPrefs);
  154. WriteParam(aMsg, aParam.mMayHaveMomentum);
  155. WriteParam(aMsg, aParam.mIsMomentum);
  156. WriteParam(aMsg, aParam.mIsNoLineOrPageDelta);
  157. WriteParam(aMsg, aParam.mLineOrPageDeltaX);
  158. WriteParam(aMsg, aParam.mLineOrPageDeltaY);
  159. WriteParam(aMsg, static_cast<uint8_t>(aParam.mScrollType));
  160. WriteParam(aMsg, aParam.mOverflowDeltaX);
  161. WriteParam(aMsg, aParam.mOverflowDeltaY);
  162. WriteParam(aMsg, aParam.mViewPortIsOverscrolled);
  163. WriteParam(aMsg, aParam.mCanTriggerSwipe);
  164. WriteParam(aMsg, aParam.mAllowToOverrideSystemScrollSpeed);
  165. }
  166. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  167. {
  168. uint8_t scrollType = 0;
  169. bool rv =
  170. ReadParam(aMsg, aIter,
  171. static_cast<mozilla::WidgetMouseEventBase*>(aResult)) &&
  172. ReadParam(aMsg, aIter, &aResult->mDeltaX) &&
  173. ReadParam(aMsg, aIter, &aResult->mDeltaY) &&
  174. ReadParam(aMsg, aIter, &aResult->mDeltaZ) &&
  175. ReadParam(aMsg, aIter, &aResult->mDeltaMode) &&
  176. ReadParam(aMsg, aIter, &aResult->mCustomizedByUserPrefs) &&
  177. ReadParam(aMsg, aIter, &aResult->mMayHaveMomentum) &&
  178. ReadParam(aMsg, aIter, &aResult->mIsMomentum) &&
  179. ReadParam(aMsg, aIter, &aResult->mIsNoLineOrPageDelta) &&
  180. ReadParam(aMsg, aIter, &aResult->mLineOrPageDeltaX) &&
  181. ReadParam(aMsg, aIter, &aResult->mLineOrPageDeltaY) &&
  182. ReadParam(aMsg, aIter, &scrollType) &&
  183. ReadParam(aMsg, aIter, &aResult->mOverflowDeltaX) &&
  184. ReadParam(aMsg, aIter, &aResult->mOverflowDeltaY) &&
  185. ReadParam(aMsg, aIter, &aResult->mViewPortIsOverscrolled) &&
  186. ReadParam(aMsg, aIter, &aResult->mCanTriggerSwipe) &&
  187. ReadParam(aMsg, aIter, &aResult->mAllowToOverrideSystemScrollSpeed);
  188. aResult->mScrollType =
  189. static_cast<mozilla::WidgetWheelEvent::ScrollType>(scrollType);
  190. return rv;
  191. }
  192. };
  193. template<>
  194. struct ParamTraits<mozilla::WidgetPointerHelper>
  195. {
  196. typedef mozilla::WidgetPointerHelper paramType;
  197. static void Write(Message* aMsg, const paramType& aParam)
  198. {
  199. WriteParam(aMsg, aParam.pointerId);
  200. WriteParam(aMsg, aParam.tiltX);
  201. WriteParam(aMsg, aParam.tiltY);
  202. WriteParam(aMsg, aParam.twist);
  203. WriteParam(aMsg, aParam.tangentialPressure);
  204. // We don't serialize convertToPointer since it's temporarily variable and
  205. // should be reset to default.
  206. }
  207. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  208. {
  209. bool rv;
  210. rv = ReadParam(aMsg, aIter, &aResult->pointerId) &&
  211. ReadParam(aMsg, aIter, &aResult->tiltX) &&
  212. ReadParam(aMsg, aIter, &aResult->tiltY) &&
  213. ReadParam(aMsg, aIter, &aResult->twist) &&
  214. ReadParam(aMsg, aIter, &aResult->tangentialPressure);
  215. return rv;
  216. }
  217. };
  218. template<>
  219. struct ParamTraits<mozilla::WidgetMouseEvent>
  220. {
  221. typedef mozilla::WidgetMouseEvent paramType;
  222. static void Write(Message* aMsg, const paramType& aParam)
  223. {
  224. WriteParam(aMsg, static_cast<mozilla::WidgetMouseEventBase>(aParam));
  225. WriteParam(aMsg, static_cast<mozilla::WidgetPointerHelper>(aParam));
  226. WriteParam(aMsg, aParam.mIgnoreRootScrollFrame);
  227. WriteParam(aMsg, static_cast<paramType::ReasonType>(aParam.mReason));
  228. WriteParam(aMsg, static_cast<paramType::ContextMenuTriggerType>(
  229. aParam.mContextMenuTrigger));
  230. WriteParam(aMsg, static_cast<paramType::ExitFromType>(aParam.mExitFrom));
  231. WriteParam(aMsg, aParam.mClickCount);
  232. }
  233. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  234. {
  235. bool rv;
  236. paramType::ReasonType reason = 0;
  237. paramType::ContextMenuTriggerType contextMenuTrigger = 0;
  238. paramType::ExitFromType exitFrom = 0;
  239. rv = ReadParam(aMsg, aIter,
  240. static_cast<mozilla::WidgetMouseEventBase*>(aResult)) &&
  241. ReadParam(aMsg, aIter,
  242. static_cast<mozilla::WidgetPointerHelper*>(aResult)) &&
  243. ReadParam(aMsg, aIter, &aResult->mIgnoreRootScrollFrame) &&
  244. ReadParam(aMsg, aIter, &reason) &&
  245. ReadParam(aMsg, aIter, &contextMenuTrigger) &&
  246. ReadParam(aMsg, aIter, &exitFrom) &&
  247. ReadParam(aMsg, aIter, &aResult->mClickCount);
  248. aResult->mReason = static_cast<paramType::Reason>(reason);
  249. aResult->mContextMenuTrigger =
  250. static_cast<paramType::ContextMenuTrigger>(contextMenuTrigger);
  251. aResult->mExitFrom = static_cast<paramType::ExitFrom>(exitFrom);
  252. return rv;
  253. }
  254. };
  255. template<>
  256. struct ParamTraits<mozilla::WidgetDragEvent>
  257. {
  258. typedef mozilla::WidgetDragEvent paramType;
  259. static void Write(Message* aMsg, const paramType& aParam)
  260. {
  261. WriteParam(aMsg, static_cast<mozilla::WidgetMouseEvent>(aParam));
  262. WriteParam(aMsg, aParam.mUserCancelled);
  263. WriteParam(aMsg, aParam.mDefaultPreventedOnContent);
  264. }
  265. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  266. {
  267. bool rv =
  268. ReadParam(aMsg, aIter, static_cast<mozilla::WidgetMouseEvent*>(aResult)) &&
  269. ReadParam(aMsg, aIter, &aResult->mUserCancelled) &&
  270. ReadParam(aMsg, aIter, &aResult->mDefaultPreventedOnContent);
  271. return rv;
  272. }
  273. };
  274. template<>
  275. struct ParamTraits<mozilla::WidgetPointerEvent>
  276. {
  277. typedef mozilla::WidgetPointerEvent paramType;
  278. static void Write(Message* aMsg, const paramType& aParam)
  279. {
  280. WriteParam(aMsg, static_cast<mozilla::WidgetMouseEvent>(aParam));
  281. WriteParam(aMsg, aParam.mWidth);
  282. WriteParam(aMsg, aParam.mHeight);
  283. WriteParam(aMsg, aParam.mIsPrimary);
  284. }
  285. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  286. {
  287. bool rv =
  288. ReadParam(aMsg, aIter, static_cast<mozilla::WidgetMouseEvent*>(aResult)) &&
  289. ReadParam(aMsg, aIter, &aResult->mWidth) &&
  290. ReadParam(aMsg, aIter, &aResult->mHeight) &&
  291. ReadParam(aMsg, aIter, &aResult->mIsPrimary);
  292. return rv;
  293. }
  294. };
  295. template<>
  296. struct ParamTraits<mozilla::WidgetTouchEvent>
  297. {
  298. typedef mozilla::WidgetTouchEvent paramType;
  299. static void Write(Message* aMsg, const paramType& aParam)
  300. {
  301. WriteParam(aMsg, static_cast<const mozilla::WidgetInputEvent&>(aParam));
  302. // Sigh, Touch bites us again! We want to be able to do
  303. // WriteParam(aMsg, aParam.mTouches);
  304. const paramType::TouchArray& touches = aParam.mTouches;
  305. WriteParam(aMsg, touches.Length());
  306. for (uint32_t i = 0; i < touches.Length(); ++i) {
  307. mozilla::dom::Touch* touch = touches[i];
  308. WriteParam(aMsg, touch->mIdentifier);
  309. WriteParam(aMsg, touch->mRefPoint);
  310. WriteParam(aMsg, touch->mRadius);
  311. WriteParam(aMsg, touch->mRotationAngle);
  312. WriteParam(aMsg, touch->mForce);
  313. }
  314. }
  315. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  316. {
  317. paramType::TouchArray::size_type numTouches;
  318. if (!ReadParam(aMsg, aIter,
  319. static_cast<mozilla::WidgetInputEvent*>(aResult)) ||
  320. !ReadParam(aMsg, aIter, &numTouches)) {
  321. return false;
  322. }
  323. for (uint32_t i = 0; i < numTouches; ++i) {
  324. int32_t identifier;
  325. mozilla::LayoutDeviceIntPoint refPoint;
  326. mozilla::LayoutDeviceIntPoint radius;
  327. float rotationAngle;
  328. float force;
  329. if (!ReadParam(aMsg, aIter, &identifier) ||
  330. !ReadParam(aMsg, aIter, &refPoint) ||
  331. !ReadParam(aMsg, aIter, &radius) ||
  332. !ReadParam(aMsg, aIter, &rotationAngle) ||
  333. !ReadParam(aMsg, aIter, &force)) {
  334. return false;
  335. }
  336. aResult->mTouches.AppendElement(
  337. new mozilla::dom::Touch(
  338. identifier, refPoint, radius, rotationAngle, force));
  339. }
  340. return true;
  341. }
  342. };
  343. template<>
  344. struct ParamTraits<mozilla::AlternativeCharCode>
  345. {
  346. typedef mozilla::AlternativeCharCode paramType;
  347. static void Write(Message* aMsg, const paramType& aParam)
  348. {
  349. WriteParam(aMsg, aParam.mUnshiftedCharCode);
  350. WriteParam(aMsg, aParam.mShiftedCharCode);
  351. }
  352. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  353. {
  354. return ReadParam(aMsg, aIter, &aResult->mUnshiftedCharCode) &&
  355. ReadParam(aMsg, aIter, &aResult->mShiftedCharCode);
  356. }
  357. };
  358. template<>
  359. struct ParamTraits<mozilla::WidgetKeyboardEvent>
  360. {
  361. typedef mozilla::WidgetKeyboardEvent paramType;
  362. static void Write(Message* aMsg, const paramType& aParam)
  363. {
  364. WriteParam(aMsg, static_cast<mozilla::WidgetInputEvent>(aParam));
  365. WriteParam(aMsg,
  366. static_cast<mozilla::KeyNameIndexType>(aParam.mKeyNameIndex));
  367. WriteParam(aMsg,
  368. static_cast<mozilla::CodeNameIndexType>(aParam.mCodeNameIndex));
  369. WriteParam(aMsg, aParam.mKeyValue);
  370. WriteParam(aMsg, aParam.mCodeValue);
  371. WriteParam(aMsg, aParam.mKeyCode);
  372. WriteParam(aMsg, aParam.mCharCode);
  373. WriteParam(aMsg, aParam.mPseudoCharCode);
  374. WriteParam(aMsg, aParam.mAlternativeCharCodes);
  375. WriteParam(aMsg, aParam.mIsChar);
  376. WriteParam(aMsg, aParam.mIsRepeat);
  377. WriteParam(aMsg, aParam.mIsReserved);
  378. WriteParam(aMsg, aParam.mAccessKeyForwardedToChild);
  379. WriteParam(aMsg, aParam.mLocation);
  380. WriteParam(aMsg, aParam.mUniqueId);
  381. WriteParam(aMsg, aParam.mIsSynthesizedByTIP);
  382. WriteParam(aMsg,
  383. static_cast<paramType::InputMethodAppStateType>
  384. (aParam.mInputMethodAppState));
  385. // An OS-specific native event might be attached in |mNativeKeyEvent|, but
  386. // that cannot be copied across process boundaries.
  387. }
  388. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  389. {
  390. mozilla::KeyNameIndexType keyNameIndex = 0;
  391. mozilla::CodeNameIndexType codeNameIndex = 0;
  392. paramType::InputMethodAppStateType inputMethodAppState = 0;
  393. if (ReadParam(aMsg, aIter,
  394. static_cast<mozilla::WidgetInputEvent*>(aResult)) &&
  395. ReadParam(aMsg, aIter, &keyNameIndex) &&
  396. ReadParam(aMsg, aIter, &codeNameIndex) &&
  397. ReadParam(aMsg, aIter, &aResult->mKeyValue) &&
  398. ReadParam(aMsg, aIter, &aResult->mCodeValue) &&
  399. ReadParam(aMsg, aIter, &aResult->mKeyCode) &&
  400. ReadParam(aMsg, aIter, &aResult->mCharCode) &&
  401. ReadParam(aMsg, aIter, &aResult->mPseudoCharCode) &&
  402. ReadParam(aMsg, aIter, &aResult->mAlternativeCharCodes) &&
  403. ReadParam(aMsg, aIter, &aResult->mIsChar) &&
  404. ReadParam(aMsg, aIter, &aResult->mIsRepeat) &&
  405. ReadParam(aMsg, aIter, &aResult->mIsReserved) &&
  406. ReadParam(aMsg, aIter, &aResult->mAccessKeyForwardedToChild) &&
  407. ReadParam(aMsg, aIter, &aResult->mLocation) &&
  408. ReadParam(aMsg, aIter, &aResult->mUniqueId) &&
  409. ReadParam(aMsg, aIter, &aResult->mIsSynthesizedByTIP) &&
  410. ReadParam(aMsg, aIter, &inputMethodAppState)
  411. )
  412. {
  413. aResult->mKeyNameIndex = static_cast<mozilla::KeyNameIndex>(keyNameIndex);
  414. aResult->mCodeNameIndex =
  415. static_cast<mozilla::CodeNameIndex>(codeNameIndex);
  416. aResult->mNativeKeyEvent = nullptr;
  417. aResult->mInputMethodAppState =
  418. static_cast<paramType::InputMethodAppState>(inputMethodAppState);
  419. return true;
  420. }
  421. return false;
  422. }
  423. };
  424. template<>
  425. struct ParamTraits<mozilla::InternalBeforeAfterKeyboardEvent>
  426. {
  427. typedef mozilla::InternalBeforeAfterKeyboardEvent paramType;
  428. static void Write(Message* aMsg, const paramType& aParam)
  429. {
  430. WriteParam(aMsg, static_cast<mozilla::WidgetKeyboardEvent>(aParam));
  431. WriteParam(aMsg, aParam.mEmbeddedCancelled.IsNull());
  432. WriteParam(aMsg, aParam.mEmbeddedCancelled.Value());
  433. }
  434. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  435. {
  436. bool isNull;
  437. bool value;
  438. bool rv =
  439. ReadParam(aMsg, aIter,
  440. static_cast<mozilla::WidgetKeyboardEvent*>(aResult)) &&
  441. ReadParam(aMsg, aIter, &isNull) &&
  442. ReadParam(aMsg, aIter, &value);
  443. aResult->mEmbeddedCancelled = Nullable<bool>();
  444. if (rv && !isNull) {
  445. aResult->mEmbeddedCancelled.SetValue(value);
  446. }
  447. return rv;
  448. }
  449. };
  450. template<>
  451. struct ParamTraits<mozilla::TextRangeStyle>
  452. {
  453. typedef mozilla::TextRangeStyle paramType;
  454. static void Write(Message* aMsg, const paramType& aParam)
  455. {
  456. WriteParam(aMsg, aParam.mDefinedStyles);
  457. WriteParam(aMsg, aParam.mLineStyle);
  458. WriteParam(aMsg, aParam.mIsBoldLine);
  459. WriteParam(aMsg, aParam.mForegroundColor);
  460. WriteParam(aMsg, aParam.mBackgroundColor);
  461. WriteParam(aMsg, aParam.mUnderlineColor);
  462. }
  463. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  464. {
  465. return ReadParam(aMsg, aIter, &aResult->mDefinedStyles) &&
  466. ReadParam(aMsg, aIter, &aResult->mLineStyle) &&
  467. ReadParam(aMsg, aIter, &aResult->mIsBoldLine) &&
  468. ReadParam(aMsg, aIter, &aResult->mForegroundColor) &&
  469. ReadParam(aMsg, aIter, &aResult->mBackgroundColor) &&
  470. ReadParam(aMsg, aIter, &aResult->mUnderlineColor);
  471. }
  472. };
  473. template<>
  474. struct ParamTraits<mozilla::TextRange>
  475. {
  476. typedef mozilla::TextRange paramType;
  477. static void Write(Message* aMsg, const paramType& aParam)
  478. {
  479. WriteParam(aMsg, aParam.mStartOffset);
  480. WriteParam(aMsg, aParam.mEndOffset);
  481. WriteParam(aMsg, mozilla::ToRawTextRangeType(aParam.mRangeType));
  482. WriteParam(aMsg, aParam.mRangeStyle);
  483. }
  484. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  485. {
  486. mozilla::RawTextRangeType rawTextRangeType;
  487. if (ReadParam(aMsg, aIter, &aResult->mStartOffset) &&
  488. ReadParam(aMsg, aIter, &aResult->mEndOffset) &&
  489. ReadParam(aMsg, aIter, &rawTextRangeType) &&
  490. ReadParam(aMsg, aIter, &aResult->mRangeStyle)) {
  491. aResult->mRangeType = mozilla::ToTextRangeType(rawTextRangeType);
  492. return true;
  493. }
  494. return false;
  495. }
  496. };
  497. template<>
  498. struct ParamTraits<mozilla::TextRangeArray>
  499. {
  500. typedef mozilla::TextRangeArray paramType;
  501. static void Write(Message* aMsg, const paramType& aParam)
  502. {
  503. WriteParam(aMsg, aParam.Length());
  504. for (uint32_t index = 0; index < aParam.Length(); index++) {
  505. WriteParam(aMsg, aParam[index]);
  506. }
  507. }
  508. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  509. {
  510. paramType::size_type length;
  511. if (!ReadParam(aMsg, aIter, &length)) {
  512. return false;
  513. }
  514. for (uint32_t index = 0; index < length; index++) {
  515. mozilla::TextRange textRange;
  516. if (!ReadParam(aMsg, aIter, &textRange)) {
  517. aResult->Clear();
  518. return false;
  519. }
  520. aResult->AppendElement(textRange);
  521. }
  522. return true;
  523. }
  524. };
  525. template<>
  526. struct ParamTraits<mozilla::WidgetCompositionEvent>
  527. {
  528. typedef mozilla::WidgetCompositionEvent paramType;
  529. static void Write(Message* aMsg, const paramType& aParam)
  530. {
  531. WriteParam(aMsg, static_cast<mozilla::WidgetGUIEvent>(aParam));
  532. WriteParam(aMsg, aParam.mData);
  533. WriteParam(aMsg, aParam.mNativeIMEContext);
  534. bool hasRanges = !!aParam.mRanges;
  535. WriteParam(aMsg, hasRanges);
  536. if (hasRanges) {
  537. WriteParam(aMsg, *aParam.mRanges.get());
  538. }
  539. }
  540. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  541. {
  542. bool hasRanges;
  543. if (!ReadParam(aMsg, aIter,
  544. static_cast<mozilla::WidgetGUIEvent*>(aResult)) ||
  545. !ReadParam(aMsg, aIter, &aResult->mData) ||
  546. !ReadParam(aMsg, aIter, &aResult->mNativeIMEContext) ||
  547. !ReadParam(aMsg, aIter, &hasRanges)) {
  548. return false;
  549. }
  550. if (!hasRanges) {
  551. aResult->mRanges = nullptr;
  552. } else {
  553. aResult->mRanges = new mozilla::TextRangeArray();
  554. if (!ReadParam(aMsg, aIter, aResult->mRanges.get())) {
  555. return false;
  556. }
  557. }
  558. return true;
  559. }
  560. };
  561. template<>
  562. struct ParamTraits<mozilla::FontRange>
  563. {
  564. typedef mozilla::FontRange paramType;
  565. static void Write(Message* aMsg, const paramType& aParam)
  566. {
  567. WriteParam(aMsg, aParam.mStartOffset);
  568. WriteParam(aMsg, aParam.mFontName);
  569. WriteParam(aMsg, aParam.mFontSize);
  570. }
  571. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  572. {
  573. return ReadParam(aMsg, aIter, &aResult->mStartOffset) &&
  574. ReadParam(aMsg, aIter, &aResult->mFontName) &&
  575. ReadParam(aMsg, aIter, &aResult->mFontSize);
  576. }
  577. };
  578. template<>
  579. struct ParamTraits<mozilla::WidgetQueryContentEvent::Input>
  580. {
  581. typedef mozilla::WidgetQueryContentEvent::Input paramType;
  582. typedef mozilla::WidgetQueryContentEvent event;
  583. static void Write(Message* aMsg, const paramType& aParam)
  584. {
  585. WriteParam(aMsg, aParam.mOffset);
  586. WriteParam(aMsg, aParam.mLength);
  587. WriteParam(aMsg, mozilla::ToRawSelectionType(aParam.mSelectionType));
  588. }
  589. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  590. {
  591. mozilla::RawSelectionType rawSelectionType = 0;
  592. bool ok = ReadParam(aMsg, aIter, &aResult->mOffset) &&
  593. ReadParam(aMsg, aIter, &aResult->mLength) &&
  594. ReadParam(aMsg, aIter, &rawSelectionType);
  595. aResult->mSelectionType = mozilla::ToSelectionType(rawSelectionType);
  596. return ok;
  597. }
  598. };
  599. template<>
  600. struct ParamTraits<mozilla::WidgetQueryContentEvent>
  601. {
  602. typedef mozilla::WidgetQueryContentEvent paramType;
  603. static void Write(Message* aMsg, const paramType& aParam)
  604. {
  605. WriteParam(aMsg, static_cast<mozilla::WidgetGUIEvent>(aParam));
  606. WriteParam(aMsg, aParam.mSucceeded);
  607. WriteParam(aMsg, aParam.mUseNativeLineBreak);
  608. WriteParam(aMsg, aParam.mWithFontRanges);
  609. WriteParam(aMsg, aParam.mInput);
  610. WriteParam(aMsg, aParam.mReply.mOffset);
  611. WriteParam(aMsg, aParam.mReply.mTentativeCaretOffset);
  612. WriteParam(aMsg, aParam.mReply.mString);
  613. WriteParam(aMsg, aParam.mReply.mRect);
  614. WriteParam(aMsg, aParam.mReply.mReversed);
  615. WriteParam(aMsg, aParam.mReply.mHasSelection);
  616. WriteParam(aMsg, aParam.mReply.mWidgetIsHit);
  617. WriteParam(aMsg, aParam.mReply.mFontRanges);
  618. }
  619. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  620. {
  621. return ReadParam(aMsg, aIter,
  622. static_cast<mozilla::WidgetGUIEvent*>(aResult)) &&
  623. ReadParam(aMsg, aIter, &aResult->mSucceeded) &&
  624. ReadParam(aMsg, aIter, &aResult->mUseNativeLineBreak) &&
  625. ReadParam(aMsg, aIter, &aResult->mWithFontRanges) &&
  626. ReadParam(aMsg, aIter, &aResult->mInput) &&
  627. ReadParam(aMsg, aIter, &aResult->mReply.mOffset) &&
  628. ReadParam(aMsg, aIter, &aResult->mReply.mTentativeCaretOffset) &&
  629. ReadParam(aMsg, aIter, &aResult->mReply.mString) &&
  630. ReadParam(aMsg, aIter, &aResult->mReply.mRect) &&
  631. ReadParam(aMsg, aIter, &aResult->mReply.mReversed) &&
  632. ReadParam(aMsg, aIter, &aResult->mReply.mHasSelection) &&
  633. ReadParam(aMsg, aIter, &aResult->mReply.mWidgetIsHit) &&
  634. ReadParam(aMsg, aIter, &aResult->mReply.mFontRanges);
  635. }
  636. };
  637. template<>
  638. struct ParamTraits<mozilla::WidgetSelectionEvent>
  639. {
  640. typedef mozilla::WidgetSelectionEvent paramType;
  641. static void Write(Message* aMsg, const paramType& aParam)
  642. {
  643. WriteParam(aMsg, static_cast<mozilla::WidgetGUIEvent>(aParam));
  644. WriteParam(aMsg, aParam.mOffset);
  645. WriteParam(aMsg, aParam.mLength);
  646. WriteParam(aMsg, aParam.mReversed);
  647. WriteParam(aMsg, aParam.mExpandToClusterBoundary);
  648. WriteParam(aMsg, aParam.mSucceeded);
  649. WriteParam(aMsg, aParam.mUseNativeLineBreak);
  650. }
  651. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  652. {
  653. return ReadParam(aMsg, aIter,
  654. static_cast<mozilla::WidgetGUIEvent*>(aResult)) &&
  655. ReadParam(aMsg, aIter, &aResult->mOffset) &&
  656. ReadParam(aMsg, aIter, &aResult->mLength) &&
  657. ReadParam(aMsg, aIter, &aResult->mReversed) &&
  658. ReadParam(aMsg, aIter, &aResult->mExpandToClusterBoundary) &&
  659. ReadParam(aMsg, aIter, &aResult->mSucceeded) &&
  660. ReadParam(aMsg, aIter, &aResult->mUseNativeLineBreak);
  661. }
  662. };
  663. template<>
  664. struct ParamTraits<nsIMEUpdatePreference>
  665. {
  666. typedef nsIMEUpdatePreference paramType;
  667. static void Write(Message* aMsg, const paramType& aParam)
  668. {
  669. WriteParam(aMsg, aParam.mWantUpdates);
  670. }
  671. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  672. {
  673. return ReadParam(aMsg, aIter, &aResult->mWantUpdates);
  674. }
  675. };
  676. template<>
  677. struct ParamTraits<mozilla::widget::NativeIMEContext>
  678. {
  679. typedef mozilla::widget::NativeIMEContext paramType;
  680. static void Write(Message* aMsg, const paramType& aParam)
  681. {
  682. WriteParam(aMsg, aParam.mRawNativeIMEContext);
  683. WriteParam(aMsg, aParam.mOriginProcessID);
  684. }
  685. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  686. {
  687. return ReadParam(aMsg, aIter, &aResult->mRawNativeIMEContext) &&
  688. ReadParam(aMsg, aIter, &aResult->mOriginProcessID);
  689. }
  690. };
  691. template<>
  692. struct ParamTraits<mozilla::widget::IMENotification::Point>
  693. {
  694. typedef mozilla::widget::IMENotification::Point paramType;
  695. static void Write(Message* aMsg, const paramType& aParam)
  696. {
  697. WriteParam(aMsg, aParam.mX);
  698. WriteParam(aMsg, aParam.mY);
  699. }
  700. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  701. {
  702. return ReadParam(aMsg, aIter, &aResult->mX) &&
  703. ReadParam(aMsg, aIter, &aResult->mY);
  704. }
  705. };
  706. template<>
  707. struct ParamTraits<mozilla::widget::IMENotification::Rect>
  708. {
  709. typedef mozilla::widget::IMENotification::Rect paramType;
  710. static void Write(Message* aMsg, const paramType& aParam)
  711. {
  712. WriteParam(aMsg, aParam.mX);
  713. WriteParam(aMsg, aParam.mY);
  714. WriteParam(aMsg, aParam.mWidth);
  715. WriteParam(aMsg, aParam.mHeight);
  716. }
  717. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  718. {
  719. return ReadParam(aMsg, aIter, &aResult->mX) &&
  720. ReadParam(aMsg, aIter, &aResult->mY) &&
  721. ReadParam(aMsg, aIter, &aResult->mWidth) &&
  722. ReadParam(aMsg, aIter, &aResult->mHeight);
  723. }
  724. };
  725. template<>
  726. struct ParamTraits<mozilla::widget::IMENotification::SelectionChangeDataBase>
  727. {
  728. typedef mozilla::widget::IMENotification::SelectionChangeDataBase paramType;
  729. static void Write(Message* aMsg, const paramType& aParam)
  730. {
  731. MOZ_RELEASE_ASSERT(aParam.mString);
  732. WriteParam(aMsg, aParam.mOffset);
  733. WriteParam(aMsg, *aParam.mString);
  734. WriteParam(aMsg, aParam.mWritingMode);
  735. WriteParam(aMsg, aParam.mReversed);
  736. WriteParam(aMsg, aParam.mCausedByComposition);
  737. WriteParam(aMsg, aParam.mCausedBySelectionEvent);
  738. WriteParam(aMsg, aParam.mOccurredDuringComposition);
  739. }
  740. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  741. {
  742. aResult->mString = new nsString();
  743. return ReadParam(aMsg, aIter, &aResult->mOffset) &&
  744. ReadParam(aMsg, aIter, aResult->mString) &&
  745. ReadParam(aMsg, aIter, &aResult->mWritingMode) &&
  746. ReadParam(aMsg, aIter, &aResult->mReversed) &&
  747. ReadParam(aMsg, aIter, &aResult->mCausedByComposition) &&
  748. ReadParam(aMsg, aIter, &aResult->mCausedBySelectionEvent) &&
  749. ReadParam(aMsg, aIter, &aResult->mOccurredDuringComposition);
  750. }
  751. };
  752. template<>
  753. struct ParamTraits<mozilla::widget::IMENotification::TextChangeDataBase>
  754. {
  755. typedef mozilla::widget::IMENotification::TextChangeDataBase paramType;
  756. static void Write(Message* aMsg, const paramType& aParam)
  757. {
  758. WriteParam(aMsg, aParam.mStartOffset);
  759. WriteParam(aMsg, aParam.mRemovedEndOffset);
  760. WriteParam(aMsg, aParam.mAddedEndOffset);
  761. WriteParam(aMsg, aParam.mCausedOnlyByComposition);
  762. WriteParam(aMsg, aParam.mIncludingChangesDuringComposition);
  763. WriteParam(aMsg, aParam.mIncludingChangesWithoutComposition);
  764. }
  765. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  766. {
  767. return ReadParam(aMsg, aIter, &aResult->mStartOffset) &&
  768. ReadParam(aMsg, aIter, &aResult->mRemovedEndOffset) &&
  769. ReadParam(aMsg, aIter, &aResult->mAddedEndOffset) &&
  770. ReadParam(aMsg, aIter, &aResult->mCausedOnlyByComposition) &&
  771. ReadParam(aMsg, aIter,
  772. &aResult->mIncludingChangesDuringComposition) &&
  773. ReadParam(aMsg, aIter,
  774. &aResult->mIncludingChangesWithoutComposition);
  775. }
  776. };
  777. template<>
  778. struct ParamTraits<mozilla::widget::IMENotification::MouseButtonEventData>
  779. {
  780. typedef mozilla::widget::IMENotification::MouseButtonEventData paramType;
  781. static void Write(Message* aMsg, const paramType& aParam)
  782. {
  783. WriteParam(aMsg, aParam.mEventMessage);
  784. WriteParam(aMsg, aParam.mOffset);
  785. WriteParam(aMsg, aParam.mCursorPos);
  786. WriteParam(aMsg, aParam.mCharRect);
  787. WriteParam(aMsg, aParam.mButton);
  788. WriteParam(aMsg, aParam.mButtons);
  789. WriteParam(aMsg, aParam.mModifiers);
  790. }
  791. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  792. {
  793. return ReadParam(aMsg, aIter, &aResult->mEventMessage) &&
  794. ReadParam(aMsg, aIter, &aResult->mOffset) &&
  795. ReadParam(aMsg, aIter, &aResult->mCursorPos) &&
  796. ReadParam(aMsg, aIter, &aResult->mCharRect) &&
  797. ReadParam(aMsg, aIter, &aResult->mButton) &&
  798. ReadParam(aMsg, aIter, &aResult->mButtons) &&
  799. ReadParam(aMsg, aIter, &aResult->mModifiers);
  800. }
  801. };
  802. template<>
  803. struct ParamTraits<mozilla::widget::IMENotification>
  804. {
  805. typedef mozilla::widget::IMENotification paramType;
  806. static void Write(Message* aMsg, const paramType& aParam)
  807. {
  808. WriteParam(aMsg,
  809. static_cast<mozilla::widget::IMEMessageType>(aParam.mMessage));
  810. switch (aParam.mMessage) {
  811. case mozilla::widget::NOTIFY_IME_OF_SELECTION_CHANGE:
  812. WriteParam(aMsg, aParam.mSelectionChangeData);
  813. return;
  814. case mozilla::widget::NOTIFY_IME_OF_TEXT_CHANGE:
  815. WriteParam(aMsg, aParam.mTextChangeData);
  816. return;
  817. case mozilla::widget::NOTIFY_IME_OF_MOUSE_BUTTON_EVENT:
  818. WriteParam(aMsg, aParam.mMouseButtonEventData);
  819. return;
  820. default:
  821. return;
  822. }
  823. }
  824. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  825. {
  826. mozilla::widget::IMEMessageType IMEMessage = 0;
  827. if (!ReadParam(aMsg, aIter, &IMEMessage)) {
  828. return false;
  829. }
  830. aResult->mMessage = static_cast<mozilla::widget::IMEMessage>(IMEMessage);
  831. switch (aResult->mMessage) {
  832. case mozilla::widget::NOTIFY_IME_OF_SELECTION_CHANGE:
  833. return ReadParam(aMsg, aIter, &aResult->mSelectionChangeData);
  834. case mozilla::widget::NOTIFY_IME_OF_TEXT_CHANGE:
  835. return ReadParam(aMsg, aIter, &aResult->mTextChangeData);
  836. case mozilla::widget::NOTIFY_IME_OF_MOUSE_BUTTON_EVENT:
  837. return ReadParam(aMsg, aIter, &aResult->mMouseButtonEventData);
  838. default:
  839. return true;
  840. }
  841. }
  842. };
  843. template<>
  844. struct ParamTraits<mozilla::WidgetPluginEvent>
  845. {
  846. typedef mozilla::WidgetPluginEvent paramType;
  847. static void Write(Message* aMsg, const paramType& aParam)
  848. {
  849. WriteParam(aMsg, static_cast<mozilla::WidgetGUIEvent>(aParam));
  850. WriteParam(aMsg, aParam.mRetargetToFocusedDocument);
  851. }
  852. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  853. {
  854. return ReadParam(aMsg, aIter,
  855. static_cast<mozilla::WidgetGUIEvent*>(aResult)) &&
  856. ReadParam(aMsg, aIter, &aResult->mRetargetToFocusedDocument);
  857. }
  858. };
  859. template<>
  860. struct ParamTraits<mozilla::WritingMode>
  861. {
  862. typedef mozilla::WritingMode paramType;
  863. static void Write(Message* aMsg, const paramType& aParam)
  864. {
  865. WriteParam(aMsg, aParam.mWritingMode);
  866. }
  867. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  868. {
  869. return ReadParam(aMsg, aIter, &aResult->mWritingMode);
  870. }
  871. };
  872. template<>
  873. struct ParamTraits<mozilla::ContentCache>
  874. {
  875. typedef mozilla::ContentCache paramType;
  876. static void Write(Message* aMsg, const paramType& aParam)
  877. {
  878. WriteParam(aMsg, aParam.mCompositionStart);
  879. WriteParam(aMsg, aParam.mText);
  880. WriteParam(aMsg, aParam.mSelection.mAnchor);
  881. WriteParam(aMsg, aParam.mSelection.mFocus);
  882. WriteParam(aMsg, aParam.mSelection.mWritingMode);
  883. WriteParam(aMsg, aParam.mSelection.mAnchorCharRects[0]);
  884. WriteParam(aMsg, aParam.mSelection.mAnchorCharRects[1]);
  885. WriteParam(aMsg, aParam.mSelection.mFocusCharRects[0]);
  886. WriteParam(aMsg, aParam.mSelection.mFocusCharRects[1]);
  887. WriteParam(aMsg, aParam.mSelection.mRect);
  888. WriteParam(aMsg, aParam.mFirstCharRect);
  889. WriteParam(aMsg, aParam.mCaret.mOffset);
  890. WriteParam(aMsg, aParam.mCaret.mRect);
  891. WriteParam(aMsg, aParam.mTextRectArray.mStart);
  892. WriteParam(aMsg, aParam.mTextRectArray.mRects);
  893. WriteParam(aMsg, aParam.mEditorRect);
  894. }
  895. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  896. {
  897. return ReadParam(aMsg, aIter, &aResult->mCompositionStart) &&
  898. ReadParam(aMsg, aIter, &aResult->mText) &&
  899. ReadParam(aMsg, aIter, &aResult->mSelection.mAnchor) &&
  900. ReadParam(aMsg, aIter, &aResult->mSelection.mFocus) &&
  901. ReadParam(aMsg, aIter, &aResult->mSelection.mWritingMode) &&
  902. ReadParam(aMsg, aIter, &aResult->mSelection.mAnchorCharRects[0]) &&
  903. ReadParam(aMsg, aIter, &aResult->mSelection.mAnchorCharRects[1]) &&
  904. ReadParam(aMsg, aIter, &aResult->mSelection.mFocusCharRects[0]) &&
  905. ReadParam(aMsg, aIter, &aResult->mSelection.mFocusCharRects[1]) &&
  906. ReadParam(aMsg, aIter, &aResult->mSelection.mRect) &&
  907. ReadParam(aMsg, aIter, &aResult->mFirstCharRect) &&
  908. ReadParam(aMsg, aIter, &aResult->mCaret.mOffset) &&
  909. ReadParam(aMsg, aIter, &aResult->mCaret.mRect) &&
  910. ReadParam(aMsg, aIter, &aResult->mTextRectArray.mStart) &&
  911. ReadParam(aMsg, aIter, &aResult->mTextRectArray.mRects) &&
  912. ReadParam(aMsg, aIter, &aResult->mEditorRect);
  913. }
  914. };
  915. template<>
  916. struct ParamTraits<mozilla::widget::CandidateWindowPosition>
  917. {
  918. typedef mozilla::widget::CandidateWindowPosition paramType;
  919. static void Write(Message* aMsg, const paramType& aParam)
  920. {
  921. WriteParam(aMsg, aParam.mPoint);
  922. WriteParam(aMsg, aParam.mRect);
  923. WriteParam(aMsg, aParam.mExcludeRect);
  924. }
  925. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  926. {
  927. return ReadParam(aMsg, aIter, &aResult->mPoint) &&
  928. ReadParam(aMsg, aIter, &aResult->mRect) &&
  929. ReadParam(aMsg, aIter, &aResult->mExcludeRect);
  930. }
  931. };
  932. // InputData.h
  933. template<>
  934. struct ParamTraits<mozilla::InputType>
  935. : public ContiguousEnumSerializer<
  936. mozilla::InputType,
  937. mozilla::InputType::MULTITOUCH_INPUT,
  938. mozilla::InputType::SENTINEL_INPUT>
  939. {};
  940. template<>
  941. struct ParamTraits<mozilla::InputData>
  942. {
  943. typedef mozilla::InputData paramType;
  944. static void Write(Message* aMsg, const paramType& aParam)
  945. {
  946. WriteParam(aMsg, aParam.mInputType);
  947. WriteParam(aMsg, aParam.mTime);
  948. WriteParam(aMsg, aParam.mTimeStamp);
  949. WriteParam(aMsg, aParam.modifiers);
  950. }
  951. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  952. {
  953. return ReadParam(aMsg, aIter, &aResult->mInputType) &&
  954. ReadParam(aMsg, aIter, &aResult->mTime) &&
  955. ReadParam(aMsg, aIter, &aResult->mTimeStamp) &&
  956. ReadParam(aMsg, aIter, &aResult->modifiers);
  957. }
  958. };
  959. template<>
  960. struct ParamTraits<mozilla::SingleTouchData>
  961. {
  962. typedef mozilla::SingleTouchData paramType;
  963. static void Write(Message* aMsg, const paramType& aParam)
  964. {
  965. WriteParam(aMsg, aParam.mIdentifier);
  966. WriteParam(aMsg, aParam.mScreenPoint);
  967. WriteParam(aMsg, aParam.mLocalScreenPoint);
  968. WriteParam(aMsg, aParam.mRadius);
  969. WriteParam(aMsg, aParam.mRotationAngle);
  970. WriteParam(aMsg, aParam.mForce);
  971. }
  972. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  973. {
  974. return (ReadParam(aMsg, aIter, &aResult->mIdentifier) &&
  975. ReadParam(aMsg, aIter, &aResult->mScreenPoint) &&
  976. ReadParam(aMsg, aIter, &aResult->mLocalScreenPoint) &&
  977. ReadParam(aMsg, aIter, &aResult->mRadius) &&
  978. ReadParam(aMsg, aIter, &aResult->mRotationAngle) &&
  979. ReadParam(aMsg, aIter, &aResult->mForce));
  980. }
  981. };
  982. template<>
  983. struct ParamTraits<mozilla::MultiTouchInput::MultiTouchType>
  984. : public ContiguousEnumSerializer<
  985. mozilla::MultiTouchInput::MultiTouchType,
  986. mozilla::MultiTouchInput::MultiTouchType::MULTITOUCH_START,
  987. mozilla::MultiTouchInput::MultiTouchType::MULTITOUCH_SENTINEL>
  988. {};
  989. template<>
  990. struct ParamTraits<mozilla::MultiTouchInput>
  991. {
  992. typedef mozilla::MultiTouchInput paramType;
  993. static void Write(Message* aMsg, const paramType& aParam)
  994. {
  995. WriteParam(aMsg, static_cast<mozilla::InputData>(aParam));
  996. WriteParam(aMsg, aParam.mType);
  997. WriteParam(aMsg, aParam.mTouches);
  998. WriteParam(aMsg, aParam.mHandledByAPZ);
  999. }
  1000. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  1001. {
  1002. return ReadParam(aMsg, aIter, static_cast<mozilla::InputData*>(aResult)) &&
  1003. ReadParam(aMsg, aIter, &aResult->mType) &&
  1004. ReadParam(aMsg, aIter, &aResult->mTouches) &&
  1005. ReadParam(aMsg, aIter, &aResult->mHandledByAPZ);
  1006. }
  1007. };
  1008. template<>
  1009. struct ParamTraits<mozilla::MouseInput::MouseType>
  1010. : public ContiguousEnumSerializer<
  1011. mozilla::MouseInput::MouseType,
  1012. mozilla::MouseInput::MouseType::MOUSE_NONE,
  1013. mozilla::MouseInput::MouseType::MOUSE_SENTINEL>
  1014. {};
  1015. template<>
  1016. struct ParamTraits<mozilla::MouseInput::ButtonType>
  1017. : public ContiguousEnumSerializer<
  1018. mozilla::MouseInput::ButtonType,
  1019. mozilla::MouseInput::ButtonType::LEFT_BUTTON,
  1020. mozilla::MouseInput::ButtonType::BUTTON_SENTINEL>
  1021. {};
  1022. template<>
  1023. struct ParamTraits<mozilla::MouseInput>
  1024. {
  1025. typedef mozilla::MouseInput paramType;
  1026. static void Write(Message* aMsg, const paramType& aParam)
  1027. {
  1028. WriteParam(aMsg, static_cast<mozilla::InputData>(aParam));
  1029. WriteParam(aMsg, aParam.mButtonType);
  1030. WriteParam(aMsg, aParam.mType);
  1031. WriteParam(aMsg, aParam.mInputSource);
  1032. WriteParam(aMsg, aParam.mButtons);
  1033. WriteParam(aMsg, aParam.mOrigin);
  1034. WriteParam(aMsg, aParam.mLocalOrigin);
  1035. WriteParam(aMsg, aParam.mHandledByAPZ);
  1036. }
  1037. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  1038. {
  1039. return ReadParam(aMsg, aIter, static_cast<mozilla::InputData*>(aResult)) &&
  1040. ReadParam(aMsg, aIter, &aResult->mButtonType) &&
  1041. ReadParam(aMsg, aIter, &aResult->mType) &&
  1042. ReadParam(aMsg, aIter, &aResult->mInputSource) &&
  1043. ReadParam(aMsg, aIter, &aResult->mButtons) &&
  1044. ReadParam(aMsg, aIter, &aResult->mOrigin) &&
  1045. ReadParam(aMsg, aIter, &aResult->mLocalOrigin) &&
  1046. ReadParam(aMsg, aIter, &aResult->mHandledByAPZ);
  1047. }
  1048. };
  1049. template<>
  1050. struct ParamTraits<mozilla::PanGestureInput::PanGestureType>
  1051. : public ContiguousEnumSerializer<
  1052. mozilla::PanGestureInput::PanGestureType,
  1053. mozilla::PanGestureInput::PanGestureType::PANGESTURE_MAYSTART,
  1054. mozilla::PanGestureInput::PanGestureType::PANGESTURE_SENTINEL>
  1055. {};
  1056. template<>
  1057. struct ParamTraits<mozilla::PanGestureInput>
  1058. {
  1059. typedef mozilla::PanGestureInput paramType;
  1060. static void Write(Message* aMsg, const paramType& aParam)
  1061. {
  1062. WriteParam(aMsg, static_cast<mozilla::InputData>(aParam));
  1063. WriteParam(aMsg, aParam.mType);
  1064. WriteParam(aMsg, aParam.mPanStartPoint);
  1065. WriteParam(aMsg, aParam.mPanDisplacement);
  1066. WriteParam(aMsg, aParam.mLocalPanStartPoint);
  1067. WriteParam(aMsg, aParam.mLocalPanDisplacement);
  1068. WriteParam(aMsg, aParam.mLineOrPageDeltaX);
  1069. WriteParam(aMsg, aParam.mLineOrPageDeltaY);
  1070. WriteParam(aMsg, aParam.mUserDeltaMultiplierX);
  1071. WriteParam(aMsg, aParam.mUserDeltaMultiplierY);
  1072. WriteParam(aMsg, aParam.mHandledByAPZ);
  1073. WriteParam(aMsg, aParam.mFollowedByMomentum);
  1074. WriteParam(aMsg, aParam.mRequiresContentResponseIfCannotScrollHorizontallyInStartDirection);
  1075. }
  1076. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  1077. {
  1078. return ReadParam(aMsg, aIter, static_cast<mozilla::InputData*>(aResult)) &&
  1079. ReadParam(aMsg, aIter, &aResult->mType) &&
  1080. ReadParam(aMsg, aIter, &aResult->mPanStartPoint) &&
  1081. ReadParam(aMsg, aIter, &aResult->mPanDisplacement) &&
  1082. ReadParam(aMsg, aIter, &aResult->mLocalPanStartPoint) &&
  1083. ReadParam(aMsg, aIter, &aResult->mLocalPanDisplacement) &&
  1084. ReadParam(aMsg, aIter, &aResult->mLineOrPageDeltaX) &&
  1085. ReadParam(aMsg, aIter, &aResult->mLineOrPageDeltaY) &&
  1086. ReadParam(aMsg, aIter, &aResult->mUserDeltaMultiplierX) &&
  1087. ReadParam(aMsg, aIter, &aResult->mUserDeltaMultiplierY) &&
  1088. ReadParam(aMsg, aIter, &aResult->mHandledByAPZ) &&
  1089. ReadParam(aMsg, aIter, &aResult->mFollowedByMomentum) &&
  1090. ReadParam(aMsg, aIter, &aResult->mRequiresContentResponseIfCannotScrollHorizontallyInStartDirection);
  1091. }
  1092. };
  1093. template<>
  1094. struct ParamTraits<mozilla::PinchGestureInput::PinchGestureType>
  1095. : public ContiguousEnumSerializer<
  1096. mozilla::PinchGestureInput::PinchGestureType,
  1097. mozilla::PinchGestureInput::PinchGestureType::PINCHGESTURE_START,
  1098. mozilla::PinchGestureInput::PinchGestureType::PINCHGESTURE_SENTINEL>
  1099. {};
  1100. template<>
  1101. struct ParamTraits<mozilla::PinchGestureInput>
  1102. {
  1103. typedef mozilla::PinchGestureInput paramType;
  1104. static void Write(Message* aMsg, const paramType& aParam)
  1105. {
  1106. WriteParam(aMsg, static_cast<mozilla::InputData>(aParam));
  1107. WriteParam(aMsg, aParam.mType);
  1108. WriteParam(aMsg, aParam.mFocusPoint);
  1109. WriteParam(aMsg, aParam.mLocalFocusPoint);
  1110. WriteParam(aMsg, aParam.mCurrentSpan);
  1111. WriteParam(aMsg, aParam.mPreviousSpan);
  1112. }
  1113. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  1114. {
  1115. return ReadParam(aMsg, aIter, static_cast<mozilla::InputData*>(aResult)) &&
  1116. ReadParam(aMsg, aIter, &aResult->mType) &&
  1117. ReadParam(aMsg, aIter, &aResult->mFocusPoint) &&
  1118. ReadParam(aMsg, aIter, &aResult->mLocalFocusPoint) &&
  1119. ReadParam(aMsg, aIter, &aResult->mCurrentSpan) &&
  1120. ReadParam(aMsg, aIter, &aResult->mPreviousSpan);
  1121. }
  1122. };
  1123. template<>
  1124. struct ParamTraits<mozilla::TapGestureInput::TapGestureType>
  1125. : public ContiguousEnumSerializer<
  1126. mozilla::TapGestureInput::TapGestureType,
  1127. mozilla::TapGestureInput::TapGestureType::TAPGESTURE_LONG,
  1128. mozilla::TapGestureInput::TapGestureType::TAPGESTURE_SENTINEL>
  1129. {};
  1130. template<>
  1131. struct ParamTraits<mozilla::TapGestureInput>
  1132. {
  1133. typedef mozilla::TapGestureInput paramType;
  1134. static void Write(Message* aMsg, const paramType& aParam)
  1135. {
  1136. WriteParam(aMsg, static_cast<mozilla::InputData>(aParam));
  1137. WriteParam(aMsg, aParam.mType);
  1138. WriteParam(aMsg, aParam.mPoint);
  1139. WriteParam(aMsg, aParam.mLocalPoint);
  1140. }
  1141. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  1142. {
  1143. return ReadParam(aMsg, aIter, static_cast<mozilla::InputData*>(aResult)) &&
  1144. ReadParam(aMsg, aIter, &aResult->mType) &&
  1145. ReadParam(aMsg, aIter, &aResult->mPoint) &&
  1146. ReadParam(aMsg, aIter, &aResult->mLocalPoint);
  1147. }
  1148. };
  1149. template<>
  1150. struct ParamTraits<mozilla::ScrollWheelInput::ScrollDeltaType>
  1151. : public ContiguousEnumSerializer<
  1152. mozilla::ScrollWheelInput::ScrollDeltaType,
  1153. mozilla::ScrollWheelInput::ScrollDeltaType::SCROLLDELTA_LINE,
  1154. mozilla::ScrollWheelInput::ScrollDeltaType::SCROLLDELTA_SENTINEL>
  1155. {};
  1156. template<>
  1157. struct ParamTraits<mozilla::ScrollWheelInput::ScrollMode>
  1158. : public ContiguousEnumSerializer<
  1159. mozilla::ScrollWheelInput::ScrollMode,
  1160. mozilla::ScrollWheelInput::ScrollMode::SCROLLMODE_INSTANT,
  1161. mozilla::ScrollWheelInput::ScrollMode::SCROLLMODE_SENTINEL>
  1162. {};
  1163. template<>
  1164. struct ParamTraits<mozilla::ScrollWheelInput>
  1165. {
  1166. typedef mozilla::ScrollWheelInput paramType;
  1167. static void Write(Message* aMsg, const paramType& aParam)
  1168. {
  1169. WriteParam(aMsg, static_cast<mozilla::InputData>(aParam));
  1170. WriteParam(aMsg, aParam.mDeltaType);
  1171. WriteParam(aMsg, aParam.mScrollMode);
  1172. WriteParam(aMsg, aParam.mOrigin);
  1173. WriteParam(aMsg, aParam.mHandledByAPZ);
  1174. WriteParam(aMsg, aParam.mDeltaX);
  1175. WriteParam(aMsg, aParam.mDeltaY);
  1176. WriteParam(aMsg, aParam.mLocalOrigin);
  1177. WriteParam(aMsg, aParam.mLineOrPageDeltaX);
  1178. WriteParam(aMsg, aParam.mLineOrPageDeltaY);
  1179. WriteParam(aMsg, aParam.mScrollSeriesNumber);
  1180. WriteParam(aMsg, aParam.mUserDeltaMultiplierX);
  1181. WriteParam(aMsg, aParam.mUserDeltaMultiplierY);
  1182. WriteParam(aMsg, aParam.mMayHaveMomentum);
  1183. WriteParam(aMsg, aParam.mIsMomentum);
  1184. WriteParam(aMsg, aParam.mAllowToOverrideSystemScrollSpeed);
  1185. }
  1186. static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
  1187. {
  1188. return ReadParam(aMsg, aIter, static_cast<mozilla::InputData*>(aResult)) &&
  1189. ReadParam(aMsg, aIter, &aResult->mDeltaType) &&
  1190. ReadParam(aMsg, aIter, &aResult->mScrollMode) &&
  1191. ReadParam(aMsg, aIter, &aResult->mOrigin) &&
  1192. ReadParam(aMsg, aIter, &aResult->mHandledByAPZ) &&
  1193. ReadParam(aMsg, aIter, &aResult->mDeltaX) &&
  1194. ReadParam(aMsg, aIter, &aResult->mDeltaY) &&
  1195. ReadParam(aMsg, aIter, &aResult->mLocalOrigin) &&
  1196. ReadParam(aMsg, aIter, &aResult->mLineOrPageDeltaX) &&
  1197. ReadParam(aMsg, aIter, &aResult->mLineOrPageDeltaY) &&
  1198. ReadParam(aMsg, aIter, &aResult->mScrollSeriesNumber) &&
  1199. ReadParam(aMsg, aIter, &aResult->mUserDeltaMultiplierX) &&
  1200. ReadParam(aMsg, aIter, &aResult->mUserDeltaMultiplierY) &&
  1201. ReadParam(aMsg, aIter, &aResult->mMayHaveMomentum) &&
  1202. ReadParam(aMsg, aIter, &aResult->mIsMomentum) &&
  1203. ReadParam(aMsg, aIter, &aResult->mAllowToOverrideSystemScrollSpeed);
  1204. }
  1205. };
  1206. } // namespace IPC
  1207. #endif // nsGUIEventIPC_h__