CrossSite.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. class DOMFastPathInfo;
  7. namespace Js
  8. {
  9. class CrossSite
  10. {
  11. friend class ExternalType;
  12. friend class DOMFastPathInfo;
  13. public:
  14. static bool IsThunk(JavascriptMethod thunk);
  15. static BOOL NeedMarshalVar(Var instance, ScriptContext * requestContext);
  16. static Var DefaultThunk(RecyclableObject* function, CallInfo callInfo, ...);
  17. static Var ProfileThunk(RecyclableObject* function, CallInfo callInfo, ...);
  18. static Var CrossSiteProxyCallTrap(RecyclableObject* function, CallInfo callInfo, ...);
  19. static Var MarshalVar(ScriptContext* scriptContext, Var value, ScriptContext* objectScriptContext);
  20. static Var MarshalVar(ScriptContext* scriptContext, Var value, bool fRequestWrapper = false);
  21. static void MarshalDynamicObjectAndPrototype(ScriptContext * scriptContext, DynamicObject * object);
  22. static void ForceCrossSiteThunkOnPrototypeChain(RecyclableObject* object);
  23. // If we know the type of the object, use this to do a virtual table check instead of a virtual call
  24. template <typename T>
  25. static BOOL IsCrossSiteObjectTyped(T * obj)
  26. {
  27. BOOL ret = VirtualTableInfo<CrossSiteObject<T>>::HasVirtualTable(obj);
  28. Assert(ret || VirtualTableInfo<T>::HasVirtualTable(obj));
  29. Assert(ret == obj->IsCrossSiteObject());
  30. return ret;
  31. }
  32. #if ENABLE_TTD
  33. static void MarshalCrossSite_TTDInflate(DynamicObject* obj);
  34. #endif
  35. private:
  36. static Var MarshalVarInner(ScriptContext* scriptContext, __in Js::RecyclableObject* object, bool fRequestWrapper);
  37. static Var CommonThunk(RecyclableObject * function, JavascriptMethod entryPoint, Arguments args);
  38. static void MarshalDynamicObject(ScriptContext * scriptContext, DynamicObject * object);
  39. static void MarshalPrototypeChain(ScriptContext * scriptContext, DynamicObject * object);
  40. static Var MarshalFrameDisplay(ScriptContext* scriptContext, FrameDisplay *display);
  41. static bool DoRequestWrapper(Js::RecyclableObject* object, bool fRequestWrapper);
  42. };
  43. };