diff options
author | jhorwich@chromium.org <jhorwich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-05 00:07:36 +0000 |
---|---|---|
committer | jhorwich@chromium.org <jhorwich@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-05 00:07:36 +0000 |
commit | c23bcafe6ffdd7d11a9589eda01bda4a06e78519 (patch) | |
tree | 3b5aa803489f5480a11743e24a2ec3a99d6704dc /ppapi | |
parent | 8dc30c4e4abf9b46668508d7997c11ab13f5e1ce (diff) | |
download | chromium_src-c23bcafe6ffdd7d11a9589eda01bda4a06e78519.zip chromium_src-c23bcafe6ffdd7d11a9589eda01bda4a06e78519.tar.gz chromium_src-c23bcafe6ffdd7d11a9589eda01bda4a06e78519.tar.bz2 |
Implement PPAPI proxied IsInstanceOf
BUG=None
TEST=use pp::VarPrivate.AsScriptableObject in out-of-process pepper plugin
Review URL: http://codereview.chromium.org/8476004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108746 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/proxy/ppb_var_deprecated_proxy.cc | 6 | ||||
-rw-r--r-- | ppapi/proxy/ppp_class_proxy.cc | 18 | ||||
-rw-r--r-- | ppapi/proxy/ppp_class_proxy.h | 5 |
3 files changed, 28 insertions, 1 deletions
diff --git a/ppapi/proxy/ppb_var_deprecated_proxy.cc b/ppapi/proxy/ppb_var_deprecated_proxy.cc index 9fd3a6c..2594d26 100644 --- a/ppapi/proxy/ppb_var_deprecated_proxy.cc +++ b/ppapi/proxy/ppb_var_deprecated_proxy.cc @@ -499,7 +499,11 @@ void PPB_Var_Deprecated_Proxy::OnMsgIsInstanceOfDeprecated( int64 ppp_class, int64* ppp_class_data, PP_Bool* result) { - // TODO(brettw) write this. + SetAllowPluginReentrancy(); + *result = PPP_Class_Proxy::IsInstanceOf(ppb_var_impl_, + var.Get(dispatcher()), + ppp_class, + ppp_class_data); } void PPB_Var_Deprecated_Proxy::OnMsgCreateObjectDeprecated( diff --git a/ppapi/proxy/ppp_class_proxy.cc b/ppapi/proxy/ppp_class_proxy.cc index a26bd81..0ff8973 100644 --- a/ppapi/proxy/ppp_class_proxy.cc +++ b/ppapi/proxy/ppp_class_proxy.cc @@ -197,6 +197,24 @@ PP_Var PPP_Class_Proxy::CreateProxiedObject(const PPB_Var_Deprecated* var, return var->CreateObject(module_id, &class_interface, object_proxy); } +// static +PP_Bool PPP_Class_Proxy::IsInstanceOf(const PPB_Var_Deprecated* ppb_var_impl, + const PP_Var& var, + int64 ppp_class, + int64* ppp_class_data) { + void* proxied_object = NULL; + if (ppb_var_impl->IsInstanceOf(var, + &class_interface, + &proxied_object)) { + if (static_cast<ObjectProxy*>(proxied_object)->ppp_class == ppp_class) { + DCHECK(ppp_class_data); + *ppp_class_data = static_cast<ObjectProxy*>(proxied_object)->user_data; + return PP_TRUE; + } + } + return PP_FALSE; +} + bool PPP_Class_Proxy::OnMessageReceived(const IPC::Message& msg) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PPP_Class_Proxy, msg) diff --git a/ppapi/proxy/ppp_class_proxy.h b/ppapi/proxy/ppp_class_proxy.h index 299c3ec..d38716d 100644 --- a/ppapi/proxy/ppp_class_proxy.h +++ b/ppapi/proxy/ppp_class_proxy.h @@ -43,6 +43,11 @@ class PPP_Class_Proxy : public InterfaceProxy { int64 ppp_class, int64 class_data); + static PP_Bool IsInstanceOf(const PPB_Var_Deprecated* ppb_var_impl, + const PP_Var& var, + int64 ppp_class, + int64* ppp_class_data); + // InterfaceProxy implementation. virtual bool OnMessageReceived(const IPC::Message& msg); |