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/plugin_instance.h" 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/logging.h" 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/examples/pepper_container_app/graphics_3d_resource.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/examples/pepper_container_app/mojo_ppapi_globals.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/c/pp_errors.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/c/pp_var.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/c/ppp_graphics_3d.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/c/ppp_instance.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/shared_impl/ppb_view_shared.h" 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/shared_impl/proxy_lock.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/shared_impl/tracked_callback.h" 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/thunk/enter.h" 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/thunk/ppb_graphics_3d_api.h" 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace mojo { 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace examples { 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 23effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPluginInstance::PluginInstance(scoped_refptr<PluginModule> plugin_module) 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : pp_instance_(0), 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch plugin_module_(plugin_module) { 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch pp_instance_ = MojoPpapiGlobals::Get()->AddInstance(this); 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 29effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPluginInstance::~PluginInstance() { 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch MojoPpapiGlobals::Get()->InstanceDeleted(pp_instance_); 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool PluginInstance::DidCreate() { 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::ProxyAutoUnlock unlock; 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PPP_Instance_1_1* instance_interface = 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<const PPP_Instance_1_1*>(plugin_module_->GetPluginInterface( 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PPP_INSTANCE_INTERFACE_1_1)); 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return !!instance_interface->DidCreate(pp_instance(), 0, NULL, NULL); 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DidDestroy() { 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::ProxyAutoUnlock unlock; 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PPP_Instance_1_1* instance_interface = 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<const PPP_Instance_1_1*>(plugin_module_->GetPluginInterface( 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PPP_INSTANCE_INTERFACE_1_1)); 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch instance_interface->DidDestroy(pp_instance()); 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DidChangeView(const PP_Rect& bounds) { 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::ViewData view_data; 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_data.rect = bounds; 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_data.is_fullscreen = false; 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_data.is_page_visible = true; 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_data.clip_rect = bounds; 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_data.device_scale = 1.0f; 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view_data.css_scale = 1.0f; 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::ScopedPPResource resource(ppapi::ScopedPPResource::PassRef(), 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch (new ppapi::PPB_View_Shared( 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::OBJECT_IS_IMPL, pp_instance(), view_data))->GetReference()); 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch { 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::ProxyAutoUnlock unlock; 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PPP_Instance_1_1* instance_interface = 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<const PPP_Instance_1_1*>(plugin_module_->GetPluginInterface( 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PPP_INSTANCE_INTERFACE_1_1)); 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch instance_interface->DidChangeView(pp_instance(), resource); 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::Graphics3DContextLost() { 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::ProxyAutoUnlock unlock; 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PPP_Graphics3D_1_0* graphic_3d_interface = 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<const PPP_Graphics3D_1_0*>(plugin_module_->GetPluginInterface( 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PPP_GRAPHICS_3D_INTERFACE_1_0)); 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TODO(yzshen): Maybe we only need to notify for the bound graphics context? 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch graphic_3d_interface->Graphics3DContextLost(pp_instance()); 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool PluginInstance::IsBoundGraphics(PP_Resource device) const { 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return device != 0 && device == bound_graphics_.get(); 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 83effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::BindGraphics(PP_Instance instance, PP_Resource device) { 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (bound_graphics_.get() == device) 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_TRUE; 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::thunk::EnterResourceNoLock<ppapi::thunk::PPB_Graphics3D_API> 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enter(device, false); 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (enter.failed()) 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bound_graphics_ = device; 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<Graphics3DResource*>(enter.object())->BindGraphics(); 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_TRUE; 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 98effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::IsFullFrame(PP_Instance instance) { 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst ppapi::ViewData* PluginInstance::GetViewData(PP_Instance instance) { 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 108effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::FlashIsFullscreen(PP_Instance instance) { 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 113effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::GetWindowObject(PP_Instance instance) { 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 118effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::GetOwnerElementObject(PP_Instance instance) { 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 123effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::ExecuteScript(PP_Instance instance, 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Var script, 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Var* exception) { 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochuint32_t PluginInstance::GetAudioHardwareOutputSampleRate( 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance) { 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return 0; 134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochuint32_t PluginInstance::GetAudioHardwareOutputBufferSize( 137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance) { 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return 0; 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 142effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::GetDefaultCharSet(PP_Instance instance) { 143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::Log(PP_Instance instance, 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_LogLevel log_level, 149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Var value) { 150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::LogWithSource(PP_Instance instance, 154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_LogLevel log_level, 155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Var source, 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Var value) { 157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SetPluginToHandleFindRequests(PP_Instance instance) { 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::NumberOfFindResultsChanged(PP_Instance instance, 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int32_t total, 166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Bool final_result) { 167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SelectedFindResultChanged(PP_Instance instance, 171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int32_t index) { 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SetTickmarks(PP_Instance instance, 176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_Rect* tickmarks, 177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t count) { 178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 181effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::IsFullscreen(PP_Instance instance) { 182effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 186effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::SetFullscreen(PP_Instance instance, 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Bool fullscreen) { 188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 192effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) { 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochppapi::Resource* PluginInstance::GetSingletonResource( 198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance, 199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ppapi::SingletonResourceID id) { 200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochint32_t PluginInstance::RequestInputEvents(PP_Instance instance, 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t event_classes) { 206effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 207effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 209effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 210effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochint32_t PluginInstance::RequestFilteringInputEvents(PP_Instance instance, 211effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t event_classes) { 212effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::ClearInputEventRequest(PP_Instance instance, 217effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t event_classes) { 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NOTIMPLEMENTED(); 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void PluginInstance::StartTrackingLatency(PP_Instance instance) { 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::PostMessage(PP_Instance instance, PP_Var message) { 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 22946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int32_t PluginInstance::RegisterMessageHandler( 23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PP_Instance instance, 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void* user_data, 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const PPP_MessageHandler_0_2* handler, 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Resource message_loop) { 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTIMPLEMENTED(); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return PP_ERROR_FAILED; 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(dmichael): Remove this. crbug.com/414398 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint32_t PluginInstance::RegisterMessageHandler_1_1_Deprecated( 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Instance instance, 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* user_data, 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const PPP_MessageHandler_0_1_Deprecated* handler, 24346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PP_Resource message_loop) { 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTIMPLEMENTED(); 24546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return PP_ERROR_FAILED; 24646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 24746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void PluginInstance::UnregisterMessageHandler(PP_Instance instance) { 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTIMPLEMENTED(); 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 252effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::SetCursor(PP_Instance instance, 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_MouseCursor_Type type, 254effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Resource image, 255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_Point* hot_spot) { 256effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 257effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 258effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 259effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 260effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochint32_t PluginInstance::LockMouse( 261effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance, 262effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<ppapi::TrackedCallback> callback) { 263effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 264effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_ERROR_FAILED; 265effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 266effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 267effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::UnlockMouse(PP_Instance instance) { 268effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 269effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 270effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 271effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SetTextInputType(PP_Instance instance, 272effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_TextInput_Type type) { 273effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 274effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 275effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 276effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::UpdateCaretPosition(PP_Instance instance, 277effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_Rect& caret, 278effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_Rect& bounding_box) { 279effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 280effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 281effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 282effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::CancelCompositionText(PP_Instance instance) { 283effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SelectionChanged(PP_Instance instance) { 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::UpdateSurroundingText(PP_Instance instance, 291effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const char* text, 292effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t caret, 293effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t anchor) { 294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 295effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 297effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::ZoomChanged(PP_Instance instance, double factor) { 298effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::ZoomLimitsChanged(PP_Instance instance, 302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch double minimum_factor, 303effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch double maximum_factor) { 304effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 305effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 306effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 307effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::GetDocumentURL(PP_Instance instance, 308effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_URLComponents_Dev* components) { 309effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 310effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 311effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 312effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PluginInstance::PromiseResolved(PP_Instance instance, uint32 promise_id) { 314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTIMPLEMENTED(); 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PluginInstance::PromiseResolvedWithSession(PP_Instance instance, 318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 promise_id, 319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var web_session_id_var) { 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTIMPLEMENTED(); 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PluginInstance::PromiseResolvedWithKeyIds(PP_Instance instance, 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 promise_id, 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var key_ids_var) { 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTIMPLEMENTED(); 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PluginInstance::PromiseRejected(PP_Instance instance, 330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 promise_id, 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_CdmExceptionCode exception_code, 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 system_code, 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var error_description_var) { 334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SessionMessage(PP_Instance instance, 338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var web_session_id_var, 339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var message_var, 340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var destination_url_var) { 341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 342effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 343effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PluginInstance::SessionKeysChange(PP_Instance instance, 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var web_session_id_var, 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Bool has_additional_usable_key) { 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTIMPLEMENTED(); 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PluginInstance::SessionExpirationChange(PP_Instance instance, 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Var web_session_id_var, 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Time new_expiry_time) { 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTIMPLEMENTED(); 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PluginInstance::SessionReady(PP_Instance instance, 357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var web_session_id_var) { 358effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 359effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 360effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PluginInstance::SessionClosed(PP_Instance instance, 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var web_session_id_var) { 363effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 364effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 365effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 366effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::SessionError(PP_Instance instance, 367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var web_session_id_var, 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_CdmExceptionCode exception_code, 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 system_code, 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PP_Var error_description_var) { 371effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 372effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 373effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 374effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DeliverBlock(PP_Instance instance, 375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Resource decrypted_block, 376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_DecryptedBlockInfo* block_info) { 377effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 378effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DecoderInitializeDone(PP_Instance instance, 381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_DecryptorStreamType decoder_type, 382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t request_id, 383effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Bool success) { 384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DecoderDeinitializeDone( 388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance, 389effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_DecryptorStreamType decoder_type, 390effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t request_id) { 391effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 392effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 393effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DecoderResetDone(PP_Instance instance, 395effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_DecryptorStreamType decoder_type, 396effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uint32_t request_id) { 397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 399effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DeliverFrame(PP_Instance instance, 401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Resource decrypted_frame, 402effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_DecryptedFrameInfo* frame_info) { 403effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 404effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 405effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 406effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid PluginInstance::DeliverSamples(PP_Instance instance, 407effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Resource audio_frames, 408effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const PP_DecryptedSampleInfo* sample_info) { 409effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 410effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 412effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::ResolveRelativeToDocument( 413effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance instance, 414effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Var relative, 415effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_URLComponents_Dev* components) { 416effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 417effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 418effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 419effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 420effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::DocumentCanRequest(PP_Instance instance, PP_Var url) { 421effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 422effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 423effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 424effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 425effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Bool PluginInstance::DocumentCanAccessDocument(PP_Instance instance, 426effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_Instance target) { 427effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 428effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_FALSE; 429effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 430effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 431effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::GetPluginInstanceURL(PP_Instance instance, 432effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_URLComponents_Dev* components) { 433effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 434effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 435effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 436effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 437effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPP_Var PluginInstance::GetPluginReferrerURL(PP_Instance instance, 438effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PP_URLComponents_Dev* components) { 439effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NOTIMPLEMENTED(); 440effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return PP_MakeUndefined(); 441effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 442effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 443effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace examples 444effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace mojo 445