virtual RefPtr<API::Object> transformObject(API::Object& object) const override { switch (object.type()) { case API::Object::Type::BundleFrame: return API::FrameHandle::createAutoconverting(static_cast<const WebFrame&>(object).frameID()); case API::Object::Type::BundlePage: return API::PageHandle::createAutoconverting(static_cast<const WebPage&>(object).pageID()); case API::Object::Type::BundlePageGroup: { WebPageGroupData pageGroupData; pageGroupData.pageGroupID = static_cast<const WebPageGroupProxy&>(object).pageGroupID(); return API::PageGroupHandle::create(WTF::move(pageGroupData)); } #if PLATFORM(COCOA) case API::Object::Type::ObjCObjectGraph: return transformObjectsToHandles(static_cast<ObjCObjectGraph&>(object)); #endif default: return &object; } }
virtual bool shouldTransformObject(const API::Object& object) const override { switch (object.type()) { case API::Object::Type::Frame: case API::Object::Type::Page: case API::Object::Type::PageGroup: #if PLATFORM(COCOA) case API::Object::Type::ObjCObjectGraph: #endif return true; default: return false; } }
virtual bool shouldTransformObject(const API::Object& object) const override { switch (object.type()) { case API::Object::Type::FrameHandle: return static_cast<const API::FrameHandle&>(object).isAutoconverting(); case API::Object::Type::PageHandle: return static_cast<const API::PageHandle&>(object).isAutoconverting(); case API::Object::Type::PageGroupHandle: #if PLATFORM(COCOA) case API::Object::Type::ObjCObjectGraph: #endif return true; default: return false; } }
virtual RefPtr<API::Object> transformObject(API::Object& object) const override { switch (object.type()) { case API::Object::Type::FrameHandle: return m_webProcess.webFrame(static_cast<const API::FrameHandle&>(object).frameID()); case API::Object::Type::PageGroupHandle: return m_webProcess.webPageGroup(static_cast<const API::PageGroupHandle&>(object).webPageGroupData()); case API::Object::Type::PageHandle: return m_webProcess.webPage(static_cast<const API::PageHandle&>(object).pageID()); #if PLATFORM(COCOA) case API::Object::Type::ObjCObjectGraph: return m_webProcess.transformHandlesToObjects(static_cast<ObjCObjectGraph&>(object)); #endif default: return &object; } }
void UserData::encode(IPC::ArgumentEncoder& encoder, const API::Object& object) const { API::Object::Type type = object.type(); encoder.encodeEnum(type); switch (object.type()) { case API::Object::Type::Array: { auto& array = static_cast<const API::Array&>(object); encoder << static_cast<uint64_t>(array.size()); for (size_t i = 0; i < array.size(); ++i) encode(encoder, array.at(i)); break; } case API::Object::Type::Boolean: static_cast<const API::Boolean&>(object).encode(encoder); break; case API::Object::Type::Data: static_cast<const API::Data&>(object).encode(encoder); break; case API::Object::Type::Dictionary: { auto& dictionary = static_cast<const ImmutableDictionary&>(object); auto& map = dictionary.map(); encoder << static_cast<uint64_t>(map.size()); for (const auto& keyValuePair : map) { encoder << keyValuePair.key; encode(encoder, keyValuePair.value.get()); } break; } case API::Object::Type::Error: static_cast<const API::Error&>(object).encode(encoder); break; case API::Object::Type::FrameHandle: { auto& frameHandle = static_cast<const API::FrameHandle&>(object); encoder << frameHandle.frameID(); break; } case API::Object::Type::Point: static_cast<const API::Point&>(object).encode(encoder); break; case API::Object::Type::Rect: static_cast<const API::Rect&>(object).encode(encoder); break; case API::Object::Type::SerializedScriptValue: { auto& serializedScriptValue = static_cast<const WebSerializedScriptValue&>(object); encoder << serializedScriptValue.dataReference(); break; } case API::Object::Type::Size: static_cast<const API::Size&>(object).encode(encoder); break; case API::Object::Type::String: { auto& string = static_cast<const API::String&>(object); encoder << string.string(); break; } case API::Object::Type::URL: { static_cast<const API::URL&>(object).encode(encoder); break; } case API::Object::Type::URLRequest: static_cast<const API::URLRequest&>(object).encode(encoder); break; case API::Object::Type::URLResponse: static_cast<const API::URLResponse&>(object).encode(encoder); break; case API::Object::Type::UInt64: static_cast<const API::UInt64&>(object).encode(encoder); break; default: ASSERT_NOT_REACHED(); } }