1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/examples/pepper_container_app/mojo_ppapi_globals.h" 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/logging.h" 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/message_loop/message_loop_proxy.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/time/time.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/examples/pepper_container_app/plugin_instance.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/c/pp_errors.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/shared_impl/ppb_message_loop_shared.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace mojo { 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace examples { 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace { 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst PP_Instance kInstanceId = 1; 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A non-abstract subclass of ppapi::MessageLoopShared that represents the 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// message loop of the main thread. 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// TODO(yzshen): Build a more general ppapi::MessageLoopShared subclass to fully 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// support PPB_MessageLoop. 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass MojoPpapiGlobals::MainThreadMessageLoopResource 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : public ppapi::MessageLoopShared { 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch explicit MainThreadMessageLoopResource( 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::MessageLoopProxy* main_thread_message_loop) 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : MessageLoopShared(ForMainThread()), 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch main_thread_message_loop_(main_thread_message_loop) {} 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ppapi::MessageLoopShared implementation. 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void PostClosure(const tracked_objects::Location& from_here, 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const base::Closure& closure, 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int64 delay_ms) OVERRIDE { 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch main_thread_message_loop_->PostDelayedTask( 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch from_here, closure, base::TimeDelta::FromMilliseconds(delay_ms)); 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual base::MessageLoopProxy* GetMessageLoopProxy() OVERRIDE { 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return main_thread_message_loop_.get(); 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool CurrentlyHandlingBlockingMessage() OVERRIDE { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ppapi::thunk::PPB_MessageLoop_API implementation. 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual int32_t AttachToCurrentThread() OVERRIDE { 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual int32_t Run() OVERRIDE { 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual int32_t PostWork(PP_CompletionCallback callback, 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int64_t delay_ms) OVERRIDE { 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual int32_t PostQuit(PP_Bool should_destroy) OVERRIDE { 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~MainThreadMessageLoopResource() {} 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<base::MessageLoopProxy> main_thread_message_loop_; 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(MainThreadMessageLoopResource); 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 80effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochMojoPpapiGlobals::MojoPpapiGlobals(Delegate* delegate) 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : delegate_(delegate), 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch plugin_instance_(NULL), 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch resource_tracker_(ppapi::ResourceTracker::THREAD_SAFE) {} 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 85effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochMojoPpapiGlobals::~MojoPpapiGlobals() {} 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 87effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Instance MojoPpapiGlobals::AddInstance(PluginInstance* instance) { 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(!plugin_instance_); 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch plugin_instance_ = instance; 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch resource_tracker_.DidCreateInstance(kInstanceId); 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return kInstanceId; 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MojoPpapiGlobals::InstanceDeleted(PP_Instance instance) { 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_EQ(instance, kInstanceId); 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(plugin_instance_); 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch resource_tracker_.DidDeleteInstance(instance); 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch plugin_instance_ = NULL; 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 101effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPluginInstance* MojoPpapiGlobals::GetInstance(PP_Instance instance) { 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (instance == kInstanceId) 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return plugin_instance_; 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 107effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochScopedMessagePipeHandle MojoPpapiGlobals::CreateGLES2Context() { 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return delegate_->CreateGLES2Context(); 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::ResourceTracker* MojoPpapiGlobals::GetResourceTracker() { 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return &resource_tracker_; 113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::VarTracker* MojoPpapiGlobals::GetVarTracker() { 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::CallbackTracker* MojoPpapiGlobals::GetCallbackTrackerForInstance( 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance) { 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (instance == kInstanceId && plugin_instance_) 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return plugin_instance_->plugin_module()->callback_tracker(); 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MojoPpapiGlobals::LogWithSource(PP_Instance instance, 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_LogLevel level, 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& source, 130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& value) { 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MojoPpapiGlobals::BroadcastLogWithSource(PP_Module module, 135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_LogLevel level, 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& source, 137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& value) { 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::thunk::PPB_Instance_API* MojoPpapiGlobals::GetInstanceAPI( 142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance) { 143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (instance == kInstanceId && plugin_instance_) 144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return plugin_instance_; 145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::thunk::ResourceCreationAPI* MojoPpapiGlobals::GetResourceCreationAPI( 149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance) { 150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (instance == kInstanceId && plugin_instance_) 151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return plugin_instance_->resource_creation(); 152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 155effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Module MojoPpapiGlobals::GetModuleForInstance(PP_Instance instance) { 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return 0; 158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::MessageLoopShared* MojoPpapiGlobals::GetCurrentMessageLoop() { 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (base::MessageLoopProxy::current().get() == GetMainThreadMessageLoop()) { 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!main_thread_message_loop_resource_.get()) { 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch main_thread_message_loop_resource_ = new MainThreadMessageLoopResource( 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GetMainThreadMessageLoop()); 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return main_thread_message_loop_resource_.get(); 167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbase::TaskRunner* MojoPpapiGlobals::GetFileTaskRunner() { 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstd::string MojoPpapiGlobals::GetCmdLine() { 179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return std::string(); 181effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 182effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid MojoPpapiGlobals::PreCacheFontForFlash(const void* logfontw) { 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace examples 188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace mojo 189