diff options
author | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-19 19:03:39 +0000 |
---|---|---|
committer | dmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-19 19:03:39 +0000 |
commit | ba7cc8c1eea511ffccdb57c66336ad84916bcdc1 (patch) | |
tree | 1a1b846cfbb03678bd6be459e1fd62433c124ab7 /ppapi/shared_impl | |
parent | 533b73784cd84662b87827dddc92aaf8fc6786d6 (diff) | |
download | chromium_src-ba7cc8c1eea511ffccdb57c66336ad84916bcdc1.zip chromium_src-ba7cc8c1eea511ffccdb57c66336ad84916bcdc1.tar.gz chromium_src-ba7cc8c1eea511ffccdb57c66336ad84916bcdc1.tar.bz2 |
PPAPI/NaCl: Reinitialize some stuff when the ipc proxy starts.
Also refactor the PPP_Instance version checking so I don't have to write the fall-back from 1.1 to 1.0 yet again.
BUG=116317
TEST=
Review URL: https://chromiumcodereview.appspot.com/10543029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143006 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/shared_impl')
-rw-r--r-- | ppapi/shared_impl/ppp_instance_combined.cc | 21 | ||||
-rw-r--r-- | ppapi/shared_impl/ppp_instance_combined.h | 14 |
2 files changed, 32 insertions, 3 deletions
diff --git a/ppapi/shared_impl/ppp_instance_combined.cc b/ppapi/shared_impl/ppp_instance_combined.cc index e5b7998..5baaf12 100644 --- a/ppapi/shared_impl/ppp_instance_combined.cc +++ b/ppapi/shared_impl/ppp_instance_combined.cc @@ -7,6 +7,27 @@ namespace ppapi { +// static +PPP_Instance_Combined* PPP_Instance_Combined::Create( + base::Callback<const void*(const char*)> get_interface_func) { + // Try 1.1. + const void* ppp_instance = get_interface_func.Run(PPP_INSTANCE_INTERFACE_1_1); + if (ppp_instance) { + const PPP_Instance_1_1* ppp_instance_1_1 = + static_cast<const PPP_Instance_1_1*>(ppp_instance); + return new PPP_Instance_Combined(*ppp_instance_1_1); + } + // Failing that, try 1.0. + ppp_instance = get_interface_func.Run(PPP_INSTANCE_INTERFACE_1_0); + if (ppp_instance) { + const PPP_Instance_1_0* ppp_instance_1_0 = + static_cast<const PPP_Instance_1_0*>(ppp_instance); + return new PPP_Instance_Combined(*ppp_instance_1_0); + } + // No supported PPP_Instance version found. + return NULL; +} + PPP_Instance_Combined::PPP_Instance_Combined( const PPP_Instance_1_0& instance_if) : did_change_view_1_0_(instance_if.DidChangeView) { diff --git a/ppapi/shared_impl/ppp_instance_combined.h b/ppapi/shared_impl/ppp_instance_combined.h index 7bb229f..a01725e 100644 --- a/ppapi/shared_impl/ppp_instance_combined.h +++ b/ppapi/shared_impl/ppp_instance_combined.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -6,6 +6,7 @@ #define PPAPI_SHARED_IMPL_PPP_INSTANCE_COMBINED_H_ #include "base/basictypes.h" +#include "base/callback.h" #include "ppapi/c/ppp_instance.h" #include "ppapi/shared_impl/ppapi_shared_export.h" @@ -15,8 +16,12 @@ namespace ppapi { // necessary. struct PPAPI_SHARED_EXPORT PPP_Instance_Combined { public: - explicit PPP_Instance_Combined(const PPP_Instance_1_0& instance_if); - explicit PPP_Instance_Combined(const PPP_Instance_1_1& instance_if); + // Create a PPP_Instance_Combined. Uses the given |get_interface_func| to + // query the plugin and find the most recent version of the PPP_Instance + // interface. If the plugin doesn't support any PPP_Instance interface, + // returns NULL. + static PPP_Instance_Combined* Create( + base::Callback<const void*(const char*)> get_plugin_if); PP_Bool DidCreate(PP_Instance instance, uint32_t argc, @@ -37,6 +42,9 @@ struct PPAPI_SHARED_EXPORT PPP_Instance_Combined { PP_Bool HandleDocumentLoad(PP_Instance instance, PP_Resource url_loader); private: + explicit PPP_Instance_Combined(const PPP_Instance_1_0& instance_if); + explicit PPP_Instance_Combined(const PPP_Instance_1_1& instance_if); + // For version 1.0, DidChangeView will be NULL, and DidChangeView_1_0 will // be set below. PPP_Instance_1_1 instance_1_1_; |