Commit f183f3ad authored by jamesr's avatar jamesr Committed by Commit bot

Remove mojo/examples/pepper_container_app

This is not being actively developed. We can bring it back from git's
history if and when we want to pick it up again.

Review URL: https://codereview.chromium.org/681203002

Cr-Commit-Position: refs/heads/master@{#301585}
parent b538eb3b
...@@ -10,7 +10,6 @@ group("mojo") { ...@@ -10,7 +10,6 @@ group("mojo") {
deps = [ deps = [
":tests", ":tests",
"//mojo/common", "//mojo/common",
"//mojo/examples",
"//mojo/public", "//mojo/public",
"//mojo/services", "//mojo/services",
"//mojo/tools/package_manager", "//mojo/tools/package_manager",
......
# 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.
import("//build/config/ui.gni")
group("examples") {
if (!is_component_build) {
deps = [ "//mojo/examples/pepper_container_app" ]
}
}
# 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.
if (!is_component_build) {
shared_library("pepper_container_app") {
output_name = "mojo_pepper_container_app"
sources = [
# Source files from ppapi/.
# An alternative is to depend on
# "//ppapi/ppapi_shared', but that target includes
# a lot of things that we don't need.
# TODO(yzshen): Consider extracting these files into a separate target
# which mojo_pepper_container_app and ppapi_shared both depend on.
"//ppapi/shared_impl/api_id.h",
"//ppapi/shared_impl/callback_tracker.cc",
"//ppapi/shared_impl/callback_tracker.h",
"//ppapi/shared_impl/host_resource.cc",
"//ppapi/shared_impl/host_resource.h",
"//ppapi/shared_impl/id_assignment.cc",
"//ppapi/shared_impl/id_assignment.h",
"//ppapi/shared_impl/ppapi_globals.cc",
"//ppapi/shared_impl/ppapi_globals.h",
"//ppapi/shared_impl/ppapi_shared_export.h",
"//ppapi/shared_impl/ppb_message_loop_shared.cc",
"//ppapi/shared_impl/ppb_message_loop_shared.h",
"//ppapi/shared_impl/ppb_view_shared.cc",
"//ppapi/shared_impl/ppb_view_shared.h",
"//ppapi/shared_impl/proxy_lock.cc",
"//ppapi/shared_impl/proxy_lock.h",
"//ppapi/shared_impl/resource.cc",
"//ppapi/shared_impl/resource.h",
"//ppapi/shared_impl/resource_tracker.cc",
"//ppapi/shared_impl/resource_tracker.h",
"//ppapi/shared_impl/scoped_pp_resource.cc",
"//ppapi/shared_impl/scoped_pp_resource.h",
"//ppapi/shared_impl/singleton_resource_id.h",
"//ppapi/shared_impl/tracked_callback.cc",
"//ppapi/shared_impl/tracked_callback.h",
"//ppapi/thunk/enter.cc",
"//ppapi/thunk/enter.h",
"//ppapi/thunk/interfaces_ppb_private.h",
"//ppapi/thunk/interfaces_ppb_private_flash.h",
"//ppapi/thunk/interfaces_ppb_private_no_permissions.h",
"//ppapi/thunk/interfaces_ppb_public_dev.h",
"//ppapi/thunk/interfaces_ppb_public_dev_channel.h",
"//ppapi/thunk/interfaces_ppb_public_stable.h",
"//ppapi/thunk/interfaces_preamble.h",
"//ppapi/thunk/ppapi_thunk_export.h",
"//ppapi/thunk/ppb_graphics_3d_api.h",
"//ppapi/thunk/ppb_graphics_3d_thunk.cc",
"//ppapi/thunk/ppb_instance_api.h",
"//ppapi/thunk/ppb_instance_thunk.cc",
"//ppapi/thunk/ppb_message_loop_api.h",
"//ppapi/thunk/ppb_view_api.h",
"//ppapi/thunk/ppb_view_thunk.cc",
"//ppapi/thunk/resource_creation_api.h",
"//ppapi/thunk/thunk.h",
"graphics_3d_resource.cc",
"graphics_3d_resource.h",
"interface_list.cc",
"interface_list.h",
"mojo_ppapi_globals.cc",
"mojo_ppapi_globals.h",
"pepper_container_app.cc",
"plugin_instance.cc",
"plugin_instance.h",
"plugin_module.cc",
"plugin_module.h",
"ppb_core_thunk.cc",
"ppb_opengles2_thunk.cc",
"resource_creation_impl.cc",
"resource_creation_impl.h",
"thunk.h",
"type_converters.h",
]
defines = [
# We don't really want to export. We could change how
# ppapi_{shared,thunk}_export.h are defined to avoid this.
"PPAPI_SHARED_IMPLEMENTATION",
"PPAPI_THUNK_IMPLEMENTATION",
]
deps = [
"//base",
"//base/third_party/dynamic_annotations",
"//gpu/command_buffer/common",
"//ppapi:ppapi_c",
# TODO(GYP):
# "//ppapi:ppapi_example_gles2_spinning_cube",
"//mojo/application",
"//mojo/common",
"//mojo/public/c/system:for_shared_library",
"//mojo/public/gles2:for_shared_library",
"//mojo/services/public/interfaces/geometry",
"//mojo/services/public/interfaces/gpu",
"//mojo/services/public/interfaces/native_viewport",
"//ui/events:events_base",
]
}
} # if (!is_component_build)
include_rules = [
"+base",
"+ppapi/c",
"+ppapi/shared_impl",
"+ppapi/thunk",
]
bbudge@chromium.org
dmichael@chromium.org
raymes@chromium.org
teravest@chromium.org
yzshen@chromium.org
// 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/examples/pepper_container_app/graphics_3d_resource.h"
#include "base/logging.h"
#include "mojo/examples/pepper_container_app/mojo_ppapi_globals.h"
#include "mojo/examples/pepper_container_app/plugin_instance.h"
#include "mojo/public/c/gles2/gles2.h"
#include "mojo/public/cpp/environment/environment.h"
#include "ppapi/c/pp_errors.h"
namespace mojo {
namespace examples {
namespace {
gpu::CommandBuffer::State GetErrorState() {
gpu::CommandBuffer::State error_state;
error_state.error = gpu::error::kGenericError;
return error_state;
}
} // namespace
Graphics3DResource::Graphics3DResource(PP_Instance instance)
: Resource(ppapi::OBJECT_IS_IMPL, instance) {
ScopedMessagePipeHandle pipe = MojoPpapiGlobals::Get()->CreateGLES2Context();
context_ = MojoGLES2CreateContext(pipe.release().value(),
&ContextLostThunk,
this,
Environment::GetDefaultAsyncWaiter());
}
bool Graphics3DResource::IsBoundGraphics() const {
PluginInstance* plugin_instance =
MojoPpapiGlobals::Get()->GetInstance(pp_instance());
return plugin_instance && plugin_instance->IsBoundGraphics(pp_resource());
}
void Graphics3DResource::BindGraphics() {
MojoGLES2MakeCurrent(context_);
}
ppapi::thunk::PPB_Graphics3D_API* Graphics3DResource::AsPPB_Graphics3D_API() {
return this;
}
int32_t Graphics3DResource::GetAttribs(int32_t attrib_list[]) {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
int32_t Graphics3DResource::SetAttribs(const int32_t attrib_list[]) {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
int32_t Graphics3DResource::GetError() {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
int32_t Graphics3DResource::ResizeBuffers(int32_t width, int32_t height) {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
int32_t Graphics3DResource::SwapBuffers(
scoped_refptr<ppapi::TrackedCallback> callback) {
if (!IsBoundGraphics())
return PP_ERROR_FAILED;
MojoGLES2SwapBuffers();
return PP_OK;
}
int32_t Graphics3DResource::GetAttribMaxValue(int32_t attribute,
int32_t* value) {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
PP_Bool Graphics3DResource::SetGetBuffer(int32_t shm_id) {
NOTIMPLEMENTED();
return PP_FALSE;
}
scoped_refptr<gpu::Buffer> Graphics3DResource::CreateTransferBuffer(
uint32_t size,
int32* id) {
NOTIMPLEMENTED();
return NULL;
}
PP_Bool Graphics3DResource::DestroyTransferBuffer(int32_t id) {
NOTIMPLEMENTED();
return PP_FALSE;
}
PP_Bool Graphics3DResource::Flush(int32_t put_offset) {
NOTIMPLEMENTED();
return PP_FALSE;
}
gpu::CommandBuffer::State Graphics3DResource::WaitForTokenInRange(int32_t start,
int32_t end) {
NOTIMPLEMENTED();
return GetErrorState();
}
gpu::CommandBuffer::State Graphics3DResource::WaitForGetOffsetInRange(
int32_t start, int32_t end) {
NOTIMPLEMENTED();
return GetErrorState();
}
void* Graphics3DResource::MapTexSubImage2DCHROMIUM(GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
GLenum access) {
NOTIMPLEMENTED();
return NULL;
}
void Graphics3DResource::UnmapTexSubImage2DCHROMIUM(const void* mem) {
NOTIMPLEMENTED();
}
uint32_t Graphics3DResource::InsertSyncPoint() {
NOTIMPLEMENTED();
return 0;
}
uint32_t Graphics3DResource::InsertFutureSyncPoint() {
NOTIMPLEMENTED();
return 0;
}
void Graphics3DResource::RetireSyncPoint(uint32_t sync_point) {
NOTIMPLEMENTED();
}
Graphics3DResource::~Graphics3DResource() {
MojoGLES2DestroyContext(context_);
}
void Graphics3DResource::ContextLostThunk(void* closure) {
static_cast<Graphics3DResource*>(closure)->ContextLost();
}
void Graphics3DResource::ContextLost() {
PluginInstance* plugin_instance =
MojoPpapiGlobals::Get()->GetInstance(pp_instance());
if (plugin_instance)
plugin_instance->Graphics3DContextLost();
}
} // namespace examples
} // namespace mojo
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_GRAPHICS_3D_RESOURCE_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_GRAPHICS_3D_RESOURCE_H_
#include "base/macros.h"
#include "mojo/public/c/gles2/gles2_types.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/tracked_callback.h"
#include "ppapi/thunk/ppb_graphics_3d_api.h"
namespace mojo {
namespace examples {
class Graphics3DResource : public ppapi::Resource,
public ppapi::thunk::PPB_Graphics3D_API {
public:
explicit Graphics3DResource(PP_Instance instance);
bool IsBoundGraphics() const;
void BindGraphics();
// ppapi::Resource overrides.
virtual ppapi::thunk::PPB_Graphics3D_API* AsPPB_Graphics3D_API() override;
// ppapi::thunk::PPB_Graphics3D_API implementation.
virtual int32_t GetAttribs(int32_t attrib_list[]) override;
virtual int32_t SetAttribs(const int32_t attrib_list[]) override;
virtual int32_t GetError() override;
virtual int32_t ResizeBuffers(int32_t width, int32_t height) override;
virtual int32_t SwapBuffers(
scoped_refptr<ppapi::TrackedCallback> callback) override;
virtual int32_t GetAttribMaxValue(int32_t attribute, int32_t* value) override;
virtual PP_Bool SetGetBuffer(int32_t shm_id) override;
virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(uint32_t size,
int32* id) override;
virtual PP_Bool DestroyTransferBuffer(int32_t id) override;
virtual PP_Bool Flush(int32_t put_offset) override;
virtual gpu::CommandBuffer::State WaitForTokenInRange(int32_t start,
int32_t end) override;
virtual gpu::CommandBuffer::State WaitForGetOffsetInRange(
int32_t start, int32_t end) override;
virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
GLint level,
GLint xoffset,
GLint yoffset,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
GLenum access) override;
virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) override;
virtual uint32_t InsertSyncPoint() override;
virtual uint32_t InsertFutureSyncPoint() override;
virtual void RetireSyncPoint(uint32_t sync_point) override;
private:
virtual ~Graphics3DResource();
static void ContextLostThunk(void* closure);
void ContextLost();
MojoGLES2Context context_;
DISALLOW_COPY_AND_ASSIGN(Graphics3DResource);
};
} // namespace examples
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_GRAPHICS_3D_RESOURCE_H_
// 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/examples/pepper_container_app/interface_list.h"
#include "base/memory/singleton.h"
#include "mojo/examples/pepper_container_app/thunk.h"
#include "ppapi/c/ppb_core.h"
#include "ppapi/c/ppb_graphics_3d.h"
#include "ppapi/c/ppb_instance.h"
#include "ppapi/c/ppb_opengles2.h"
#include "ppapi/c/ppb_view.h"
#include "ppapi/thunk/thunk.h"
namespace mojo {
namespace examples {
InterfaceList::InterfaceList() {
browser_interfaces_[PPB_CORE_INTERFACE_1_0] = GetPPB_Core_1_0_Thunk();
browser_interfaces_[PPB_GRAPHICS_3D_INTERFACE_1_0] =
ppapi::thunk::GetPPB_Graphics3D_1_0_Thunk();
browser_interfaces_[PPB_OPENGLES2_INTERFACE_1_0] =
GetPPB_OpenGLES2_Thunk();
browser_interfaces_[PPB_INSTANCE_INTERFACE_1_0] =
ppapi::thunk::GetPPB_Instance_1_0_Thunk();
browser_interfaces_[PPB_VIEW_INTERFACE_1_0] =
ppapi::thunk::GetPPB_View_1_0_Thunk();
browser_interfaces_[PPB_VIEW_INTERFACE_1_1] =
ppapi::thunk::GetPPB_View_1_1_Thunk();
}
InterfaceList::~InterfaceList() {}
// static
InterfaceList* InterfaceList::GetInstance() {
return Singleton<InterfaceList>::get();
}
const void* InterfaceList::GetBrowserInterface(const std::string& name) const {
NameToInterfaceMap::const_iterator iter = browser_interfaces_.find(name);
if (iter == browser_interfaces_.end())
return NULL;
return iter->second;
}
} // namespace examples
} // namespace mojo
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_INTERFACE_LIST_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_INTERFACE_LIST_H_
#include <map>
#include <string>
#include "base/macros.h"
namespace mojo {
namespace examples {
// InterfaceList maintains the mapping from Pepper interface names to
// interface pointers.
class InterfaceList {
public:
InterfaceList();
~InterfaceList();
static InterfaceList* GetInstance();
const void* GetBrowserInterface(const std::string& name) const;
private:
typedef std::map<std::string, const void*> NameToInterfaceMap;
NameToInterfaceMap browser_interfaces_;
DISALLOW_COPY_AND_ASSIGN(InterfaceList);
};
} // namespace examples
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_INTERFACE_LIST_H_
// 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/examples/pepper_container_app/mojo_ppapi_globals.h"
#include "base/logging.h"
#include "base/macros.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/time/time.h"
#include "mojo/examples/pepper_container_app/plugin_instance.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/shared_impl/ppb_message_loop_shared.h"
namespace mojo {
namespace examples {
namespace {
const PP_Instance kInstanceId = 1;
} // namespace
// A non-abstract subclass of ppapi::MessageLoopShared that represents the
// message loop of the main thread.
// TODO(yzshen): Build a more general ppapi::MessageLoopShared subclass to fully
// support PPB_MessageLoop.
class MojoPpapiGlobals::MainThreadMessageLoopResource
: public ppapi::MessageLoopShared {
public:
explicit MainThreadMessageLoopResource(
base::MessageLoopProxy* main_thread_message_loop)
: MessageLoopShared(ForMainThread()),
main_thread_message_loop_(main_thread_message_loop) {}
// ppapi::MessageLoopShared implementation.
virtual void PostClosure(const tracked_objects::Location& from_here,
const base::Closure& closure,
int64 delay_ms) override {
main_thread_message_loop_->PostDelayedTask(
from_here, closure, base::TimeDelta::FromMilliseconds(delay_ms));
}
virtual base::MessageLoopProxy* GetMessageLoopProxy() override {
return main_thread_message_loop_.get();
}
virtual bool CurrentlyHandlingBlockingMessage() override {
return false;
}
// ppapi::thunk::PPB_MessageLoop_API implementation.
virtual int32_t AttachToCurrentThread() override {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
virtual int32_t Run() override {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
virtual int32_t PostWork(PP_CompletionCallback callback,
int64_t delay_ms) override {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
virtual int32_t PostQuit(PP_Bool should_destroy) override {
NOTIMPLEMENTED();
return PP_ERROR_FAILED;
}
private:
virtual ~MainThreadMessageLoopResource() {}
scoped_refptr<base::MessageLoopProxy> main_thread_message_loop_;
DISALLOW_COPY_AND_ASSIGN(MainThreadMessageLoopResource);
};
MojoPpapiGlobals::MojoPpapiGlobals(Delegate* delegate)
: delegate_(delegate),
plugin_instance_(NULL),
resource_tracker_(ppapi::ResourceTracker::THREAD_SAFE) {}
MojoPpapiGlobals::~MojoPpapiGlobals() {}
PP_Instance MojoPpapiGlobals::AddInstance(PluginInstance* instance) {
DCHECK(!plugin_instance_);
plugin_instance_ = instance;
resource_tracker_.DidCreateInstance(kInstanceId);
return kInstanceId;
}
void MojoPpapiGlobals::InstanceDeleted(PP_Instance instance) {
DCHECK_EQ(instance, kInstanceId);
DCHECK(plugin_instance_);
resource_tracker_.DidDeleteInstance(instance);
plugin_instance_ = NULL;
}
PluginInstance* MojoPpapiGlobals::GetInstance(PP_Instance instance) {
if (instance == kInstanceId)
return plugin_instance_;
return NULL;
}
ScopedMessagePipeHandle MojoPpapiGlobals::CreateGLES2Context() {
return delegate_->CreateGLES2Context();
}
ppapi::ResourceTracker* MojoPpapiGlobals::GetResourceTracker() {
return &resource_tracker_;
}
ppapi::VarTracker* MojoPpapiGlobals::GetVarTracker() {
NOTIMPLEMENTED();
return NULL;
}
ppapi::CallbackTracker* MojoPpapiGlobals::GetCallbackTrackerForInstance(
PP_Instance instance) {
if (instance == kInstanceId && plugin_instance_)
return plugin_instance_->plugin_module()->callback_tracker();
return NULL;
}
void MojoPpapiGlobals::LogWithSource(PP_Instance instance,
PP_LogLevel level,
const std::string& source,
const std::string& value) {
NOTIMPLEMENTED();
}
void MojoPpapiGlobals::BroadcastLogWithSource(PP_Module module,
PP_LogLevel level,
const std::string& source,
const std::string& value) {
NOTIMPLEMENTED();
}
ppapi::thunk::PPB_Instance_API* MojoPpapiGlobals::GetInstanceAPI(
PP_Instance instance) {
if (instance == kInstanceId && plugin_instance_)
return plugin_instance_;
return NULL;
}
ppapi::thunk::ResourceCreationAPI* MojoPpapiGlobals::GetResourceCreationAPI(
PP_Instance instance) {
if (instance == kInstanceId && plugin_instance_)
return plugin_instance_->resource_creation();
return NULL;
}
PP_Module MojoPpapiGlobals::GetModuleForInstance(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
ppapi::MessageLoopShared* MojoPpapiGlobals::GetCurrentMessageLoop() {
if (base::MessageLoopProxy::current().get() == GetMainThreadMessageLoop()) {
if (!main_thread_message_loop_resource_.get()) {
main_thread_message_loop_resource_ = new MainThreadMessageLoopResource(
GetMainThreadMessageLoop());
}
return main_thread_message_loop_resource_.get();
}
NOTIMPLEMENTED();
return NULL;
}
base::TaskRunner* MojoPpapiGlobals::GetFileTaskRunner() {
NOTIMPLEMENTED();
return NULL;
}
std::string MojoPpapiGlobals::GetCmdLine() {
NOTIMPLEMENTED();
return std::string();
}
void MojoPpapiGlobals::PreCacheFontForFlash(const void* logfontw) {
NOTIMPLEMENTED();
}
} // namespace examples
} // namespace mojo
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_MOJO_PPAPI_GLOBALS_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_MOJO_PPAPI_GLOBALS_H_
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "mojo/public/cpp/system/core.h"
#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource_tracker.h"
namespace base {
class MessageLoopProxy;
}
namespace mojo {
namespace examples {
class PluginInstance;
class MojoPpapiGlobals : public ppapi::PpapiGlobals {
public:
class Delegate {
public:
virtual ~Delegate() {}
virtual ScopedMessagePipeHandle CreateGLES2Context() = 0;
};
// |delegate| must live longer than this object.
explicit MojoPpapiGlobals(Delegate* delegate);
virtual ~MojoPpapiGlobals();
inline static MojoPpapiGlobals* Get() {
return static_cast<MojoPpapiGlobals*>(PpapiGlobals::Get());
}
PP_Instance AddInstance(PluginInstance* instance);
void InstanceDeleted(PP_Instance instance);
PluginInstance* GetInstance(PP_Instance instance);
ScopedMessagePipeHandle CreateGLES2Context();
// ppapi::PpapiGlobals implementation.
virtual ppapi::ResourceTracker* GetResourceTracker() override;
virtual ppapi::VarTracker* GetVarTracker() override;
virtual ppapi::CallbackTracker* GetCallbackTrackerForInstance(
PP_Instance instance) override;
virtual void LogWithSource(PP_Instance instance,
PP_LogLevel level,
const std::string& source,
const std::string& value) override;
virtual void BroadcastLogWithSource(PP_Module module,
PP_LogLevel level,
const std::string& source,
const std::string& value) override;
virtual ppapi::thunk::PPB_Instance_API* GetInstanceAPI(
PP_Instance instance) override;
virtual ppapi::thunk::ResourceCreationAPI* GetResourceCreationAPI(
PP_Instance instance) override;
virtual PP_Module GetModuleForInstance(PP_Instance instance) override;
virtual ppapi::MessageLoopShared* GetCurrentMessageLoop() override;
virtual base::TaskRunner* GetFileTaskRunner() override;
virtual std::string GetCmdLine() override;
virtual void PreCacheFontForFlash(const void* logfontw) override;
private:
class MainThreadMessageLoopResource;
// Non-owning pointer.
Delegate* const delegate_;
// Non-owning pointer.
PluginInstance* plugin_instance_;
ppapi::ResourceTracker resource_tracker_;
scoped_refptr<MainThreadMessageLoopResource>
main_thread_message_loop_resource_;
DISALLOW_COPY_AND_ASSIGN(MojoPpapiGlobals);
};
} // namespace examples
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_MOJO_PPAPI_GLOBALS_H_
// 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 "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "build/build_config.h"
#include "mojo/application/application_runner_chromium.h"
#include "mojo/examples/pepper_container_app/mojo_ppapi_globals.h"
#include "mojo/examples/pepper_container_app/plugin_instance.h"
#include "mojo/examples/pepper_container_app/plugin_module.h"
#include "mojo/examples/pepper_container_app/type_converters.h"
#include "mojo/public/c/system/main.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/application_impl.h"
#include "mojo/public/cpp/system/core.h"
#include "mojo/services/public/interfaces/geometry/geometry.mojom.h"
#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
#include "mojo/services/public/interfaces/native_viewport/native_viewport.mojom.h"
#include "ppapi/c/pp_rect.h"
#include "ppapi/shared_impl/proxy_lock.h"
namespace mojo {
namespace examples {
class PepperContainerApp: public ApplicationDelegate,
public NativeViewportClient,
public MojoPpapiGlobals::Delegate {
public:
PepperContainerApp()
: ppapi_globals_(this),
plugin_module_(new PluginModule),
weak_factory_(this) {}
virtual ~PepperContainerApp() {}
virtual void Initialize(ApplicationImpl* app) override {
app->ConnectToService("mojo:native_viewport_service", &viewport_);
viewport_.set_client(this);
// TODO(jamesr): Should be mojo:gpu_service
app->ConnectToService("mojo:native_viewport_service", &gpu_service_);
SizePtr size(Size::New());
size->width = 800;
size->height = 600;
viewport_->Create(size.Pass(),
base::Bind(&PepperContainerApp::OnCreatedNativeViewport,
weak_factory_.GetWeakPtr()));
viewport_->Show();
}
// NativeViewportClient implementation.
virtual void OnDestroyed() override {
ppapi::ProxyAutoLock lock;
if (plugin_instance_) {
plugin_instance_->DidDestroy();
plugin_instance_.reset();
}
base::MessageLoop::current()->Quit();
}
virtual void OnSizeChanged(SizePtr size) override {
ppapi::ProxyAutoLock lock;
if (plugin_instance_) {
PP_Rect pp_rect = {{0, 0}, {size->width, size->height}};
plugin_instance_->DidChangeView(pp_rect);
}
}
virtual void OnEvent(EventPtr event,
const mojo::Callback<void()>& callback) override {
if (!event->location_data.is_null()) {
ppapi::ProxyAutoLock lock;
// TODO(yzshen): Handle events.
}
callback.Run();
}
// MojoPpapiGlobals::Delegate implementation.
virtual ScopedMessagePipeHandle CreateGLES2Context() override {
CommandBufferPtr command_buffer;
SizePtr size = Size::New();
size->width = 800;
size->width = 600;
// TODO(jamesr): Output a surface to the native viewport instead.
gpu_service_->CreateOnscreenGLES2Context(
native_viewport_id_, size.Pass(), GetProxy(&command_buffer));
return command_buffer.PassMessagePipe();
}
private:
void OnCreatedNativeViewport(uint64_t native_viewport_id) {
native_viewport_id_ = native_viewport_id;
ppapi::ProxyAutoLock lock;
plugin_instance_ = plugin_module_->CreateInstance().Pass();
if (!plugin_instance_->DidCreate())
plugin_instance_.reset();
}
MojoPpapiGlobals ppapi_globals_;
uint64_t native_viewport_id_;
NativeViewportPtr viewport_;
GpuPtr gpu_service_;
scoped_refptr<PluginModule> plugin_module_;
scoped_ptr<PluginInstance> plugin_instance_;
base::WeakPtrFactory<PepperContainerApp> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(PepperContainerApp);
};
} // namespace examples
} // namespace mojo
MojoResult MojoMain(MojoHandle shell_handle) {
mojo::ApplicationRunnerChromium runner(
new mojo::examples::PepperContainerApp);
return runner.Run(shell_handle);
}
This diff is collapsed.
This diff is collapsed.
// 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/examples/pepper_container_app/plugin_module.h"
#include <string>
#include "base/files/file_path.h"
#include "base/logging.h"
#include "build/build_config.h"
#include "mojo/examples/pepper_container_app/interface_list.h"
#include "mojo/examples/pepper_container_app/plugin_instance.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/shared_impl/callback_tracker.h"
namespace mojo {
namespace examples {
namespace {
const void* GetInterface(const char* name) {
const void* interface =
InterfaceList::GetInstance()->GetBrowserInterface(name);
if (!interface)
LOG(WARNING) << "Interface requested " << name;
return interface;
}
} // namespace
PluginModule::EntryPoints::EntryPoints() : get_interface(NULL),
initialize_module(NULL),
shutdown_module(NULL) {}
PluginModule::PluginModule() : callback_tracker_(new ppapi::CallbackTracker) {
Initialize();
}
PluginModule::~PluginModule() {
callback_tracker_->AbortAll();
if (entry_points_.shutdown_module)
entry_points_.shutdown_module();
}
scoped_ptr<PluginInstance> PluginModule::CreateInstance() {
return make_scoped_ptr(new PluginInstance(this));
}
const void* PluginModule::GetPluginInterface(const char* name) const {
if (entry_points_.get_interface)
return entry_points_.get_interface(name);
return NULL;
}
void PluginModule::Initialize() {
// Platform-specific filename.
// TODO(yzshen): Don't hard-code it.
#if defined(OS_WIN)
static const wchar_t plugin_name[] = L"ppapi_example_gles2_spinning_cube.dll";
#elif defined(OS_MACOSX)
static const char plugin_name[] = "ppapi_example_gles2_spinning_cube.plugin";
#elif defined(OS_POSIX)
static const char plugin_name[] = "libppapi_example_gles2_spinning_cube.so";
#endif
base::FilePath plugin_path(plugin_name);
base::NativeLibraryLoadError error;
plugin_module_.Reset(base::LoadNativeLibrary(plugin_path, &error));
if (!plugin_module_.is_valid()) {
LOG(WARNING) << "Cannot load " << plugin_path.AsUTF8Unsafe()
<< ". Error: " << error.ToString();
return;
}
entry_points_.get_interface =
reinterpret_cast<PP_GetInterface_Func>(
plugin_module_.GetFunctionPointer("PPP_GetInterface"));
if (!entry_points_.get_interface) {
LOG(WARNING) << "No PPP_GetInterface in plugin library";
return;
}
entry_points_.initialize_module =
reinterpret_cast<PP_InitializeModule_Func>(
plugin_module_.GetFunctionPointer("PPP_InitializeModule"));
if (!entry_points_.initialize_module) {
LOG(WARNING) << "No PPP_InitializeModule in plugin library";
return;
}
// It's okay for PPP_ShutdownModule to not be defined and |shutdown_module| to
// be NULL.
entry_points_.shutdown_module =
reinterpret_cast<PP_ShutdownModule_Func>(
plugin_module_.GetFunctionPointer("PPP_ShutdownModule"));
int32_t result = entry_points_.initialize_module(pp_module(),
&GetInterface);
if (result != PP_OK)
LOG(WARNING) << "Initializing module failed with error " << result;
}
} // namespace examples
} // namespace mojo
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_PLUGIN_MODULE_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_PLUGIN_MODULE_H_
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/native_library.h"
#include "base/scoped_native_library.h"
#include "ppapi/c/pp_module.h"
#include "ppapi/c/ppp.h"
namespace ppapi {
class CallbackTracker;
}
namespace mojo {
namespace examples {
class PluginInstance;
class PluginModule : public base::RefCounted<PluginModule> {
public:
PluginModule();
scoped_ptr<PluginInstance> CreateInstance();
const void* GetPluginInterface(const char* name) const;
PP_Module pp_module() const { return 1; }
ppapi::CallbackTracker* callback_tracker() { return callback_tracker_.get(); }
private:
friend class base::RefCounted<PluginModule>;
struct EntryPoints {
EntryPoints();
PP_GetInterface_Func get_interface;
PP_InitializeModule_Func initialize_module;
PP_ShutdownModule_Func shutdown_module; // Optional, may be NULL.
};
~PluginModule();
void Initialize();
base::ScopedNativeLibrary plugin_module_;
EntryPoints entry_points_;
scoped_refptr<ppapi::CallbackTracker> callback_tracker_;
DISALLOW_COPY_AND_ASSIGN(PluginModule);
};
} // namespace examples
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_PLUGIN_MODULE_H_
// 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 "base/logging.h"
#include "mojo/examples/pepper_container_app/thunk.h"
#include "ppapi/c/ppb_core.h"
#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/proxy_lock.h"
#include "ppapi/shared_impl/resource_tracker.h"
namespace mojo {
namespace examples {
namespace {
void AddRefResource(PP_Resource resource) {
ppapi::ProxyAutoLock lock;
ppapi::PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource);
}
void ReleaseResource(PP_Resource resource) {
ppapi::ProxyAutoLock lock;
ppapi::PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource);
}
PP_Time GetTime() {
NOTIMPLEMENTED();
return 0;
}
PP_TimeTicks GetTimeTicks() {
NOTIMPLEMENTED();
return 0;
}
void CallOnMainThread(int32_t delay_in_milliseconds,
PP_CompletionCallback callback,
int32_t result) {
NOTIMPLEMENTED();
}
PP_Bool IsMainThread() {
NOTIMPLEMENTED();
return PP_TRUE;
}
} // namespace
const PPB_Core_1_0 g_ppb_core_thunk_1_0 = {
&AddRefResource,
&ReleaseResource,
&GetTime,
&GetTimeTicks,
&CallOnMainThread,
&IsMainThread
};
const PPB_Core_1_0* GetPPB_Core_1_0_Thunk() {
return &g_ppb_core_thunk_1_0;
}
} // namespace examples
} // namespace mojo
// 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/examples/pepper_container_app/resource_creation_impl.h"
#include "base/logging.h"
#include "mojo/examples/pepper_container_app/graphics_3d_resource.h"
namespace mojo {
namespace examples {
ResourceCreationImpl::ResourceCreationImpl() {}
ResourceCreationImpl::~ResourceCreationImpl() {}
PP_Resource ResourceCreationImpl::CreateFileIO(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFileRef(
PP_Instance instance,
const ppapi::FileRefCreateInfo& create_info) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFileSystem(
PP_Instance instance,
PP_FileSystemType type) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateIMEInputEvent(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
struct PP_Var text,
uint32_t segment_number,
const uint32_t* segment_offsets,
int32_t target_segment,
uint32_t selection_start,
uint32_t selection_end) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent_1_0(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers,
uint32_t key_code,
struct PP_Var character_text) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateKeyboardInputEvent_1_2(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers,
uint32_t key_code,
struct PP_Var character_text,
struct PP_Var code) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateMouseInputEvent(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers,
PP_InputEvent_MouseButton mouse_button,
const PP_Point* mouse_position,
int32_t click_count,
const PP_Point* mouse_movement) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTouchInputEvent(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTrueTypeFont(
PP_Instance instance,
const PP_TrueTypeFontDesc_Dev* desc) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateURLLoader(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateURLRequestInfo(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateWheelInputEvent(
PP_Instance instance,
PP_TimeTicks time_stamp,
uint32_t modifiers,
const PP_FloatPoint* wheel_delta,
const PP_FloatPoint* wheel_ticks,
PP_Bool scroll_by_page) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateAudio1_0(
PP_Instance instance,
PP_Resource config_id,
PPB_Audio_Callback_1_0 audio_callback,
void* user_data) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateAudio(
PP_Instance instance,
PP_Resource config_id,
PPB_Audio_Callback audio_callback,
void* user_data) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateAudioTrusted(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateAudioConfig(
PP_Instance instance,
PP_AudioSampleRate sample_rate,
uint32_t sample_frame_count) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateCompositor(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFileChooser(
PP_Instance instance,
PP_FileChooserMode_Dev mode,
const PP_Var& accept_types) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateGraphics2D(PP_Instance instance,
const PP_Size* size,
PP_Bool is_always_opaque) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateGraphics3D(
PP_Instance instance,
PP_Resource share_context,
const int32_t* attrib_list) {
return (new Graphics3DResource(instance))->GetReference();
}
PP_Resource ResourceCreationImpl::CreateGraphics3DRaw(
PP_Instance instance,
PP_Resource share_context,
const int32_t* attrib_list,
base::SharedMemoryHandle* shared_state) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateHostResolver(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateHostResolverPrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateImageData(
PP_Instance instance,
PP_ImageDataFormat format,
const PP_Size* size,
PP_Bool init_to_zero) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateImageDataSimple(
PP_Instance instance,
PP_ImageDataFormat format,
const PP_Size* size,
PP_Bool init_to_zero) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateMediaStreamVideoTrack(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateNetAddressFromIPv4Address(
PP_Instance instance,
const PP_NetAddress_IPv4* ipv4_addr) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateNetAddressFromIPv6Address(
PP_Instance instance,
const PP_NetAddress_IPv6* ipv6_addr) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateNetAddressFromNetAddressPrivate(
PP_Instance instance,
const PP_NetAddress_Private& private_addr) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateNetworkMonitor(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateOutputProtectionPrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreatePrinting(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTCPServerSocketPrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTCPSocket1_0(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTCPSocket(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTCPSocketPrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateUDPSocket(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateUDPSocketPrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateVideoDecoder(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateVideoDestination(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateVideoSource(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateWebSocket(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateX509CertificatePrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
#if !defined(OS_NACL)
PP_Resource ResourceCreationImpl::CreateAudioInput(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateBroker(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateBrowserFont(
PP_Instance instance,
const PP_BrowserFont_Trusted_Description* description) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateBuffer(PP_Instance instance,
uint32_t size) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFlashDRM(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFlashFontFile(
PP_Instance instance,
const PP_BrowserFont_Trusted_Description* description,
PP_PrivateFontCharset charset) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFlashMenu(
PP_Instance instance,
const PP_Flash_Menu* menu_data) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateFlashMessageLoop(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreatePlatformVerificationPrivate(
PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateScrollbar(PP_Instance instance,
PP_Bool vertical) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateTalk(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateVideoCapture(PP_Instance instance) {
NOTIMPLEMENTED();
return 0;
}
PP_Resource ResourceCreationImpl::CreateVideoDecoderDev(
PP_Instance instance,
PP_Resource context3d_id,
PP_VideoDecoder_Profile profile) {
NOTIMPLEMENTED();
return 0;
}
#endif // !defined(OS_NACL)
} // namespace examples
} // namespace mojo
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_RESOURCE_CREATION_IMPL_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_RESOURCE_CREATION_IMPL_H_
#include "base/macros.h"
#include "build/build_config.h"
#include "ppapi/thunk/resource_creation_api.h"
namespace mojo {
namespace examples {
class ResourceCreationImpl : public ppapi::thunk::ResourceCreationAPI {
public:
ResourceCreationImpl();
virtual ~ResourceCreationImpl();
// ppapi::thunk::ResourceCreationAPI implementation.
virtual PP_Resource CreateFileIO(PP_Instance instance) override;
virtual PP_Resource CreateFileRef(
PP_Instance instance,
const ppapi::FileRefCreateInfo& create_info) override;
virtual PP_Resource CreateFileSystem(PP_Instance instance,
PP_FileSystemType type) override;
virtual PP_Resource CreateIMEInputEvent(PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
struct PP_Var text,
uint32_t segment_number,
const uint32_t* segment_offsets,
int32_t target_segment,
uint32_t selection_start,
uint32_t selection_end) override;
virtual PP_Resource CreateKeyboardInputEvent_1_0(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers,
uint32_t key_code,
PP_Var character_text) override;
virtual PP_Resource CreateKeyboardInputEvent_1_2(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers,
uint32_t key_code,
PP_Var character_text,
PP_Var code) override;
virtual PP_Resource CreateMouseInputEvent(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers,
PP_InputEvent_MouseButton mouse_button,
const PP_Point* mouse_position,
int32_t click_count,
const PP_Point* mouse_movement) override;
virtual PP_Resource CreateTouchInputEvent(
PP_Instance instance,
PP_InputEvent_Type type,
PP_TimeTicks time_stamp,
uint32_t modifiers) override;
virtual PP_Resource CreateTrueTypeFont(
PP_Instance instance,
const PP_TrueTypeFontDesc_Dev* desc) override;
virtual PP_Resource CreateURLLoader(PP_Instance instance) override;
virtual PP_Resource CreateURLRequestInfo(
PP_Instance instance) override;
virtual PP_Resource CreateWheelInputEvent(
PP_Instance instance,
PP_TimeTicks time_stamp,
uint32_t modifiers,
const PP_FloatPoint* wheel_delta,
const PP_FloatPoint* wheel_ticks,
PP_Bool scroll_by_page) override;
virtual PP_Resource CreateAudio1_0(PP_Instance instance,
PP_Resource config_id,
PPB_Audio_Callback_1_0 audio_callback,
void* user_data) override;
virtual PP_Resource CreateAudio(PP_Instance instance,
PP_Resource config_id,
PPB_Audio_Callback audio_callback,
void* user_data) override;
virtual PP_Resource CreateAudioTrusted(PP_Instance instance) override;
virtual PP_Resource CreateAudioConfig(PP_Instance instance,
PP_AudioSampleRate sample_rate,
uint32_t sample_frame_count) override;
virtual PP_Resource CreateCompositor(PP_Instance instance) override;
virtual PP_Resource CreateFileChooser(PP_Instance instance,
PP_FileChooserMode_Dev mode,
const PP_Var& accept_types) override;
virtual PP_Resource CreateGraphics2D(PP_Instance pp_instance,
const PP_Size* size,
PP_Bool is_always_opaque) override;
virtual PP_Resource CreateGraphics3D(PP_Instance instance,
PP_Resource share_context,
const int32_t* attrib_list) override;
virtual PP_Resource CreateGraphics3DRaw(
PP_Instance instance,
PP_Resource share_context,
const int32_t* attrib_list,
base::SharedMemoryHandle* shared_state) override;
virtual PP_Resource CreateHostResolver(PP_Instance instance) override;
virtual PP_Resource CreateHostResolverPrivate(PP_Instance instance) override;
virtual PP_Resource CreateImageData(PP_Instance instance,
PP_ImageDataFormat format,
const PP_Size* size,
PP_Bool init_to_zero) override;
virtual PP_Resource CreateImageDataSimple(PP_Instance instance,
PP_ImageDataFormat format,
const PP_Size* size,
PP_Bool init_to_zero) override;
virtual PP_Resource CreateMediaStreamVideoTrack(
PP_Instance instance) override;
virtual PP_Resource CreateNetAddressFromIPv4Address(
PP_Instance instance,
const PP_NetAddress_IPv4* ipv4_addr) override;
virtual PP_Resource CreateNetAddressFromIPv6Address(
PP_Instance instance,
const PP_NetAddress_IPv6* ipv6_addr) override;
virtual PP_Resource CreateNetAddressFromNetAddressPrivate(
PP_Instance instance,
const PP_NetAddress_Private& private_addr) override;
virtual PP_Resource CreateNetworkMonitor(PP_Instance instance) override;
virtual PP_Resource CreateOutputProtectionPrivate(
PP_Instance instance) override;
virtual PP_Resource CreatePrinting(PP_Instance) override;
virtual PP_Resource CreateTCPServerSocketPrivate(
PP_Instance instance) override;
virtual PP_Resource CreateTCPSocket1_0(PP_Instance instance) override;
virtual PP_Resource CreateTCPSocket(PP_Instance instance) override;
virtual PP_Resource CreateTCPSocketPrivate(PP_Instance instance) override;
virtual PP_Resource CreateUDPSocket(PP_Instance instance) override;
virtual PP_Resource CreateUDPSocketPrivate(PP_Instance instance) override;
virtual PP_Resource CreateVideoDecoder(PP_Instance instance) override;
virtual PP_Resource CreateVideoDestination(PP_Instance instance) override;
virtual PP_Resource CreateVideoSource(PP_Instance instance) override;
virtual PP_Resource CreateWebSocket(PP_Instance instance) override;
virtual PP_Resource CreateX509CertificatePrivate(
PP_Instance instance) override;
#if !defined(OS_NACL)
virtual PP_Resource CreateAudioInput(PP_Instance instance) override;
virtual PP_Resource CreateBroker(PP_Instance instance) override;
virtual PP_Resource CreateBrowserFont(
PP_Instance instance,
const PP_BrowserFont_Trusted_Description* description) override;
virtual PP_Resource CreateBuffer(PP_Instance instance,
uint32_t size) override;
virtual PP_Resource CreateFlashDRM(PP_Instance instance) override;
virtual PP_Resource CreateFlashFontFile(
PP_Instance instance,
const PP_BrowserFont_Trusted_Description* description,
PP_PrivateFontCharset charset) override;
virtual PP_Resource CreateFlashMenu(PP_Instance instance,
const PP_Flash_Menu* menu_data) override;
virtual PP_Resource CreateFlashMessageLoop(PP_Instance instance) override;
virtual PP_Resource CreatePlatformVerificationPrivate(
PP_Instance instance) override;
virtual PP_Resource CreateScrollbar(PP_Instance instance,
PP_Bool vertical) override;
virtual PP_Resource CreateTalk(PP_Instance instance) override;
virtual PP_Resource CreateVideoCapture(PP_Instance instance) override;
virtual PP_Resource CreateVideoDecoderDev(
PP_Instance instance,
PP_Resource context3d_id,
PP_VideoDecoder_Profile profile) override;
#endif // !defined(OS_NACL)
private:
DISALLOW_COPY_AND_ASSIGN(ResourceCreationImpl);
};
} // namespace examples
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_RESOURCE_CREATION_IMPL_H_
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_THUNK_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_THUNK_H_
#include "ppapi/c/ppb_core.h"
#include "ppapi/c/ppb_opengles2.h"
namespace mojo {
namespace examples {
const PPB_Core_1_0* GetPPB_Core_1_0_Thunk();
const PPB_OpenGLES2* GetPPB_OpenGLES2_Thunk();
} // namespace examples
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_THUNK_H_
// 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.
#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_TYPE_CONVERTERS_H_
#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_TYPE_CONVERTERS_H_
#include "mojo/public/cpp/bindings/type_converter.h"
#include "mojo/services/public/interfaces/native_viewport/native_viewport.mojom.h"
#include "ppapi/c/pp_point.h"
#include "ppapi/c/pp_rect.h"
#include "ppapi/c/pp_size.h"
namespace mojo {
template <>
struct TypeConverter<PointPtr, PP_Point> {
static PointPtr Convert(const PP_Point& input) {
PointPtr point(Point::New());
point->x = input.x;
point->y = input.y;
return point.Pass();
}
};
template <>
struct TypeConverter<PP_Point, PointPtr> {
static PP_Point Convert(const PointPtr& input) {
if (!input)
return PP_MakePoint(0, 0);
return PP_MakePoint(static_cast<int32_t>(input->x),
static_cast<int32_t>(input->y));
}
};
template <>
struct TypeConverter<SizePtr, PP_Size> {
static SizePtr Convert(const PP_Size& input) {
SizePtr size(Size::New());
size->width = input.width;
size->height = input.height;
return size.Pass();
}
};
template <>
struct TypeConverter<PP_Size, SizePtr> {
static PP_Size Convert(const SizePtr& input) {
if (!input)
return PP_MakeSize(0, 0);
return PP_MakeSize(static_cast<int32_t>(input->width),
static_cast<int32_t>(input->height));
}
};
template <>
struct TypeConverter<RectPtr, PP_Rect> {
static RectPtr Convert(const PP_Rect& input) {
RectPtr rect(Rect::New());
rect->x = input.point.x;
rect->y = input.point.y;
rect->width = input.size.width;
rect->height = input.size.height;
return rect.Pass();
}
};
template <>
struct TypeConverter<PP_Rect, SizePtr> {
static PP_Rect Convert(const SizePtr& input) {
if (!input)
return PP_MakeRectFromXYWH(0, 0, 0, 0);
return PP_MakeRectFromXYWH(0, 0, input->width, input->height);
}
};
} // namespace mojo
#endif // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_TYPE_CONVERTERS_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment