Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Unified Diff: mojo/examples/pepper_container_app/pepper_container_app.cc

Issue 178953003: Mojo container example for hosting Pepper plugins (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/examples/pepper_container_app/pepper_container_app.cc
diff --git a/mojo/examples/pepper_container_app/pepper_container_app.cc b/mojo/examples/pepper_container_app/pepper_container_app.cc
new file mode 100644
index 0000000000000000000000000000000000000000..949ba358d936c51a3cb564aec2e91b79e844bfb5
--- /dev/null
+++ b/mojo/examples/pepper_container_app/pepper_container_app.cc
@@ -0,0 +1,137 @@
+// 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/message_loop/message_loop.h"
+#include "build/build_config.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/public/bindings/allocation_scope.h"
+#include "mojo/public/bindings/remote_ptr.h"
+#include "mojo/public/environment/environment.h"
+#include "mojo/public/gles2/gles2_cpp.h"
+#include "mojo/public/shell/application.h"
+#include "mojo/public/system/core.h"
+#include "mojom/native_viewport.h"
+#include "mojom/shell.h"
+#include "ppapi/c/pp_rect.h"
+#include "ppapi/shared_impl/proxy_lock.h"
+
+#if defined(OS_WIN)
+#if !defined(CDECL)
+#define CDECL __cdecl
+#endif
+#define PEPPER_CONTAINER_APP_EXPORT __declspec(dllexport)
+#else
+#define CDECL
+#define PEPPER_CONTAINER_APP_EXPORT __attribute__((visibility("default")))
+#endif
+
+namespace mojo {
+namespace examples {
+
+class PepperContainerApp: public Application,
+ public NativeViewportClient,
+ public MojoPpapiGlobals::Delegate {
+ public:
+ explicit PepperContainerApp(MojoHandle shell_handle)
+ : Application(shell_handle),
+ ppapi_globals_(this),
+ plugin_module_(new PluginModule) {
+ InterfacePipe<NativeViewport, AnyInterface> viewport_pipe;
+ mojo::AllocationScope scope;
+ shell()->Connect("mojo:mojo_native_viewport_service",
+ viewport_pipe.handle_to_peer.Pass());
+ viewport_.reset(viewport_pipe.handle_to_self.Pass(), this);
+ Rect::Builder rect;
+ Point::Builder point;
+ point.set_x(10);
+ point.set_y(10);
+ rect.set_position(point.Finish());
+ Size::Builder size;
+ size.set_width(800);
+ size.set_height(600);
+ rect.set_size(size.Finish());
+ viewport_->Create(rect.Finish());
+ viewport_->Show();
+ }
+
+ virtual ~PepperContainerApp() {}
+
+ // NativeViewportClient implementation.
+ virtual void OnCreated() OVERRIDE {
+ ppapi::ProxyAutoLock lock;
+
+ plugin_instance_ = plugin_module_->CreateInstance().Pass();
+ if (!plugin_instance_->DidCreate())
+ plugin_instance_.reset();
+ }
+
+ virtual void OnDestroyed() OVERRIDE {
+ ppapi::ProxyAutoLock lock;
+
+ if (plugin_instance_) {
+ plugin_instance_->DidDestroy();
+ plugin_instance_.reset();
+ }
+
+ base::MessageLoop::current()->Quit();
+ }
+
+ virtual void OnBoundsChanged(const Rect& bounds) OVERRIDE {
+ ppapi::ProxyAutoLock lock;
+
+ if (plugin_instance_) {
+ PP_Rect rect;
+ rect.point.x = bounds.position().x();
darin (slow to review) 2014/03/20 23:29:35 note: if you want, you can introduce mojo::TypeCon
yzshen1 2014/03/21 03:22:00 Done. I added a new file type_converters for mojom
+ rect.point.y = bounds.position().y();
+ rect.size.width = bounds.size().width();
+ rect.size.height = bounds.size().height();
+
+ plugin_instance_->DidChangeView(rect);
+ }
+ }
+
+ virtual void OnEvent(const Event& event) OVERRIDE {
+ ppapi::ProxyAutoLock lock;
+
+ if (!event.location().is_null()) {
+ // TODO(yzshen): Handle events.
+ viewport_->AckEvent(event);
+ }
+ }
+
+ // MojoPpapiGlobals::Delegate implementation.
+ virtual ScopedMessagePipeHandle CreateGLES2Context() OVERRIDE {
+ MessagePipe gles2_pipe;
+ viewport_->CreateGLES2Context(gles2_pipe.handle1.Pass());
+ return gles2_pipe.handle0.Pass();
+ }
+
+ private:
+ MojoPpapiGlobals ppapi_globals_;
+
+ RemotePtr<NativeViewport> viewport_;
+ scoped_refptr<PluginModule> plugin_module_;
+ scoped_ptr<PluginInstance> plugin_instance_;
+
+ DISALLOW_COPY_AND_ASSIGN(PepperContainerApp);
+};
+
+} // namespace examples
+} // namespace mojo
+
+extern "C" PEPPER_CONTAINER_APP_EXPORT MojoResult CDECL MojoMain(
+ MojoHandle shell_handle) {
+ mojo::Environment env;
+ mojo::GLES2Initializer gles2;
+ base::MessageLoop run_loop;
+ mojo::examples::PepperContainerApp app(shell_handle);
+
+ run_loop.Run();
+ return MOJO_RESULT_OK;
+}

Powered by Google App Engine
This is Rietveld 408576698