123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "mojo/core/entrypoints.h"
- #include <stdint.h>
- #include "base/no_destructor.h"
- #include "mojo/core/core.h"
- #include "mojo/public/c/system/buffer.h"
- #include "mojo/public/c/system/data_pipe.h"
- #include "mojo/public/c/system/functions.h"
- #include "mojo/public/c/system/message_pipe.h"
- #include "mojo/public/c/system/platform_handle.h"
- #include "mojo/public/c/system/quota.h"
- namespace {
- mojo::core::Core* g_core;
- extern "C" {
- MojoResult MojoInitializeImpl(const struct MojoInitializeOptions* options) {
- NOTREACHED() << "Do not call MojoInitialize() as a Mojo Core embedder!";
- return MOJO_RESULT_UNIMPLEMENTED;
- }
- MojoTimeTicks MojoGetTimeTicksNowImpl() {
- return g_core->GetTimeTicksNow();
- }
- MojoResult MojoCloseImpl(MojoHandle handle) {
- return g_core->Close(handle);
- }
- MojoResult MojoQueryHandleSignalsStateImpl(
- MojoHandle handle,
- MojoHandleSignalsState* signals_state) {
- return g_core->QueryHandleSignalsState(handle, signals_state);
- }
- MojoResult MojoCreateMessagePipeImpl(
- const MojoCreateMessagePipeOptions* options,
- MojoHandle* message_pipe_handle0,
- MojoHandle* message_pipe_handle1) {
- return g_core->CreateMessagePipe(options, message_pipe_handle0,
- message_pipe_handle1);
- }
- MojoResult MojoWriteMessageImpl(MojoHandle message_pipe_handle,
- MojoMessageHandle message,
- const MojoWriteMessageOptions* options) {
- return g_core->WriteMessage(message_pipe_handle, message, options);
- }
- MojoResult MojoReadMessageImpl(MojoHandle message_pipe_handle,
- const MojoReadMessageOptions* options,
- MojoMessageHandle* message) {
- return g_core->ReadMessage(message_pipe_handle, options, message);
- }
- MojoResult MojoFuseMessagePipesImpl(
- MojoHandle handle0,
- MojoHandle handle1,
- const MojoFuseMessagePipesOptions* options) {
- return g_core->FuseMessagePipes(handle0, handle1, options);
- }
- MojoResult MojoCreateMessageImpl(const MojoCreateMessageOptions* options,
- MojoMessageHandle* message) {
- return g_core->CreateMessage(options, message);
- }
- MojoResult MojoDestroyMessageImpl(MojoMessageHandle message) {
- return g_core->DestroyMessage(message);
- }
- MojoResult MojoSerializeMessageImpl(
- MojoMessageHandle message,
- const MojoSerializeMessageOptions* options) {
- return g_core->SerializeMessage(message, options);
- }
- MojoResult MojoAppendMessageDataImpl(
- MojoMessageHandle message,
- uint32_t additional_payload_size,
- const MojoHandle* handles,
- uint32_t num_handles,
- const MojoAppendMessageDataOptions* options,
- void** buffer,
- uint32_t* buffer_size) {
- return g_core->AppendMessageData(message, additional_payload_size, handles,
- num_handles, options, buffer, buffer_size);
- }
- MojoResult MojoGetMessageDataImpl(MojoMessageHandle message,
- const MojoGetMessageDataOptions* options,
- void** buffer,
- uint32_t* num_bytes,
- MojoHandle* handles,
- uint32_t* num_handles) {
- return g_core->GetMessageData(message, options, buffer, num_bytes, handles,
- num_handles);
- }
- MojoResult MojoSetMessageContextImpl(
- MojoMessageHandle message,
- uintptr_t context,
- MojoMessageContextSerializer serializer,
- MojoMessageContextDestructor destructor,
- const MojoSetMessageContextOptions* options) {
- return g_core->SetMessageContext(message, context, serializer, destructor,
- options);
- }
- MojoResult MojoGetMessageContextImpl(
- MojoMessageHandle message,
- const MojoGetMessageContextOptions* options,
- uintptr_t* context) {
- return g_core->GetMessageContext(message, options, context);
- }
- MojoResult MojoNotifyBadMessageImpl(
- MojoMessageHandle message,
- const char* error,
- uint32_t error_num_bytes,
- const MojoNotifyBadMessageOptions* options) {
- return g_core->NotifyBadMessage(message, error, error_num_bytes, options);
- }
- MojoResult MojoCreateDataPipeImpl(const MojoCreateDataPipeOptions* options,
- MojoHandle* data_pipe_producer_handle,
- MojoHandle* data_pipe_consumer_handle) {
- return g_core->CreateDataPipe(options, data_pipe_producer_handle,
- data_pipe_consumer_handle);
- }
- MojoResult MojoWriteDataImpl(MojoHandle data_pipe_producer_handle,
- const void* elements,
- uint32_t* num_elements,
- const MojoWriteDataOptions* options) {
- return g_core->WriteData(data_pipe_producer_handle, elements, num_elements,
- options);
- }
- MojoResult MojoBeginWriteDataImpl(MojoHandle data_pipe_producer_handle,
- const MojoBeginWriteDataOptions* options,
- void** buffer,
- uint32_t* buffer_num_elements) {
- return g_core->BeginWriteData(data_pipe_producer_handle, options, buffer,
- buffer_num_elements);
- }
- MojoResult MojoEndWriteDataImpl(MojoHandle data_pipe_producer_handle,
- uint32_t num_elements_written,
- const MojoEndWriteDataOptions* options) {
- return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written,
- options);
- }
- MojoResult MojoReadDataImpl(MojoHandle data_pipe_consumer_handle,
- const MojoReadDataOptions* options,
- void* elements,
- uint32_t* num_elements) {
- return g_core->ReadData(data_pipe_consumer_handle, options, elements,
- num_elements);
- }
- MojoResult MojoBeginReadDataImpl(MojoHandle data_pipe_consumer_handle,
- const MojoBeginReadDataOptions* options,
- const void** buffer,
- uint32_t* buffer_num_elements) {
- return g_core->BeginReadData(data_pipe_consumer_handle, options, buffer,
- buffer_num_elements);
- }
- MojoResult MojoEndReadDataImpl(MojoHandle data_pipe_consumer_handle,
- uint32_t num_elements_read,
- const MojoEndReadDataOptions* options) {
- return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read,
- options);
- }
- MojoResult MojoCreateSharedBufferImpl(
- uint64_t num_bytes,
- const MojoCreateSharedBufferOptions* options,
- MojoHandle* shared_buffer_handle) {
- return g_core->CreateSharedBuffer(num_bytes, options, shared_buffer_handle);
- }
- MojoResult MojoDuplicateBufferHandleImpl(
- MojoHandle buffer_handle,
- const MojoDuplicateBufferHandleOptions* options,
- MojoHandle* new_buffer_handle) {
- return g_core->DuplicateBufferHandle(buffer_handle, options,
- new_buffer_handle);
- }
- MojoResult MojoMapBufferImpl(MojoHandle buffer_handle,
- uint64_t offset,
- uint64_t num_bytes,
- const MojoMapBufferOptions* options,
- void** buffer) {
- return g_core->MapBuffer(buffer_handle, offset, num_bytes, options, buffer);
- }
- MojoResult MojoUnmapBufferImpl(void* buffer) {
- return g_core->UnmapBuffer(buffer);
- }
- MojoResult MojoGetBufferInfoImpl(MojoHandle buffer_handle,
- const MojoGetBufferInfoOptions* options,
- MojoSharedBufferInfo* info) {
- return g_core->GetBufferInfo(buffer_handle, options, info);
- }
- MojoResult MojoCreateTrapImpl(MojoTrapEventHandler handler,
- const MojoCreateTrapOptions* options,
- MojoHandle* trap_handle) {
- return g_core->CreateTrap(handler, options, trap_handle);
- }
- MojoResult MojoAddTriggerImpl(MojoHandle trap_handle,
- MojoHandle handle,
- MojoHandleSignals signals,
- MojoTriggerCondition condition,
- uintptr_t context,
- const MojoAddTriggerOptions* options) {
- return g_core->AddTrigger(trap_handle, handle, signals, condition, context,
- options);
- }
- MojoResult MojoRemoveTriggerImpl(MojoHandle trap_handle,
- uintptr_t context,
- const MojoRemoveTriggerOptions* options) {
- return g_core->RemoveTrigger(trap_handle, context, options);
- }
- MojoResult MojoArmTrapImpl(MojoHandle trap_handle,
- const MojoArmTrapOptions* options,
- uint32_t* num_blocking_events,
- MojoTrapEvent* blocking_events) {
- return g_core->ArmTrap(trap_handle, options, num_blocking_events,
- blocking_events);
- }
- MojoResult MojoWrapPlatformHandleImpl(
- const MojoPlatformHandle* platform_handle,
- const MojoWrapPlatformHandleOptions* options,
- MojoHandle* mojo_handle) {
- return g_core->WrapPlatformHandle(platform_handle, options, mojo_handle);
- }
- MojoResult MojoUnwrapPlatformHandleImpl(
- MojoHandle mojo_handle,
- const MojoUnwrapPlatformHandleOptions* options,
- MojoPlatformHandle* platform_handle) {
- return g_core->UnwrapPlatformHandle(mojo_handle, options, platform_handle);
- }
- MojoResult MojoWrapPlatformSharedMemoryRegionImpl(
- const MojoPlatformHandle* platform_handles,
- uint32_t num_platform_handles,
- uint64_t num_bytes,
- const MojoSharedBufferGuid* guid,
- MojoPlatformSharedMemoryRegionAccessMode access_mode,
- const MojoWrapPlatformSharedMemoryRegionOptions* options,
- MojoHandle* mojo_handle) {
- return g_core->WrapPlatformSharedMemoryRegion(
- platform_handles, num_platform_handles, num_bytes, guid, access_mode,
- options, mojo_handle);
- }
- MojoResult MojoUnwrapPlatformSharedMemoryRegionImpl(
- MojoHandle mojo_handle,
- const MojoUnwrapPlatformSharedMemoryRegionOptions* options,
- MojoPlatformHandle* platform_handles,
- uint32_t* num_platform_handles,
- uint64_t* num_bytes,
- MojoSharedBufferGuid* guid,
- MojoPlatformSharedMemoryRegionAccessMode* access_mode) {
- return g_core->UnwrapPlatformSharedMemoryRegion(
- mojo_handle, options, platform_handles, num_platform_handles, num_bytes,
- guid, access_mode);
- }
- MojoResult MojoCreateInvitationImpl(const MojoCreateInvitationOptions* options,
- MojoHandle* invitation_handle) {
- return g_core->CreateInvitation(options, invitation_handle);
- }
- MojoResult MojoAttachMessagePipeToInvitationImpl(
- MojoHandle invitation_handle,
- const void* name,
- uint32_t name_num_bytes,
- const MojoAttachMessagePipeToInvitationOptions* options,
- MojoHandle* message_pipe_handle) {
- return g_core->AttachMessagePipeToInvitation(
- invitation_handle, name, name_num_bytes, options, message_pipe_handle);
- }
- MojoResult MojoExtractMessagePipeFromInvitationImpl(
- MojoHandle invitation_handle,
- const void* name,
- uint32_t name_num_bytes,
- const MojoExtractMessagePipeFromInvitationOptions* options,
- MojoHandle* message_pipe_handle) {
- return g_core->ExtractMessagePipeFromInvitation(
- invitation_handle, name, name_num_bytes, options, message_pipe_handle);
- }
- MojoResult MojoSendInvitationImpl(
- MojoHandle invitation_handle,
- const MojoPlatformProcessHandle* process_handle,
- const MojoInvitationTransportEndpoint* transport_endpoint,
- MojoProcessErrorHandler error_handler,
- uintptr_t error_handler_context,
- const MojoSendInvitationOptions* options) {
- return g_core->SendInvitation(invitation_handle, process_handle,
- transport_endpoint, error_handler,
- error_handler_context, options);
- }
- MojoResult MojoAcceptInvitationImpl(
- const MojoInvitationTransportEndpoint* transport_endpoint,
- const MojoAcceptInvitationOptions* options,
- MojoHandle* invitation_handle) {
- return g_core->AcceptInvitation(transport_endpoint, options,
- invitation_handle);
- }
- MojoResult MojoSetQuotaImpl(MojoHandle handle,
- MojoQuotaType type,
- uint64_t limit,
- const MojoSetQuotaOptions* options) {
- return g_core->SetQuota(handle, type, limit, options);
- }
- MojoResult MojoQueryQuotaImpl(MojoHandle handle,
- MojoQuotaType type,
- const MojoQueryQuotaOptions* options,
- uint64_t* current_limit,
- uint64_t* current_usage) {
- return g_core->QueryQuota(handle, type, options, current_limit,
- current_usage);
- }
- MojoResult MojoShutdownImpl(const MojoShutdownOptions* options) {
- NOTREACHED() << "Do not call MojoShutdown() as a Mojo Core embedder!";
- return MOJO_RESULT_UNIMPLEMENTED;
- }
- MojoResult MojoSetDefaultProcessErrorHandlerImpl(
- MojoDefaultProcessErrorHandler handler,
- const MojoSetDefaultProcessErrorHandlerOptions* options) {
- return g_core->SetDefaultProcessErrorHandler(handler, options);
- }
- } // extern "C"
- MojoSystemThunks2 g_thunks = {sizeof(g_thunks),
- MojoInitializeImpl,
- MojoGetTimeTicksNowImpl,
- MojoCloseImpl,
- MojoQueryHandleSignalsStateImpl,
- MojoCreateMessagePipeImpl,
- MojoWriteMessageImpl,
- MojoReadMessageImpl,
- MojoFuseMessagePipesImpl,
- MojoCreateMessageImpl,
- MojoDestroyMessageImpl,
- MojoSerializeMessageImpl,
- MojoAppendMessageDataImpl,
- MojoGetMessageDataImpl,
- MojoSetMessageContextImpl,
- MojoGetMessageContextImpl,
- MojoNotifyBadMessageImpl,
- MojoCreateDataPipeImpl,
- MojoWriteDataImpl,
- MojoBeginWriteDataImpl,
- MojoEndWriteDataImpl,
- MojoReadDataImpl,
- MojoBeginReadDataImpl,
- MojoEndReadDataImpl,
- MojoCreateSharedBufferImpl,
- MojoDuplicateBufferHandleImpl,
- MojoMapBufferImpl,
- MojoUnmapBufferImpl,
- MojoGetBufferInfoImpl,
- MojoCreateTrapImpl,
- MojoAddTriggerImpl,
- MojoRemoveTriggerImpl,
- MojoArmTrapImpl,
- MojoWrapPlatformHandleImpl,
- MojoUnwrapPlatformHandleImpl,
- MojoWrapPlatformSharedMemoryRegionImpl,
- MojoUnwrapPlatformSharedMemoryRegionImpl,
- MojoCreateInvitationImpl,
- MojoAttachMessagePipeToInvitationImpl,
- MojoExtractMessagePipeFromInvitationImpl,
- MojoSendInvitationImpl,
- MojoAcceptInvitationImpl,
- MojoSetQuotaImpl,
- MojoQueryQuotaImpl,
- MojoShutdownImpl,
- MojoSetDefaultProcessErrorHandlerImpl};
- } // namespace
- namespace mojo {
- namespace core {
- // static
- Core* Core::Get() {
- return g_core;
- }
- void InitializeCore() {
- static base::NoDestructor<Core> core_instance;
- g_core = core_instance.get();
- }
- const MojoSystemThunks2& GetSystemThunks() {
- return g_thunks;
- }
- } // namespace core
- } // namespace mojo
|