summaryrefslogtreecommitdiffstats
path: root/ppapi/shared_impl
diff options
context:
space:
mode:
authordmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-19 19:03:39 +0000
committerdmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-19 19:03:39 +0000
commitba7cc8c1eea511ffccdb57c66336ad84916bcdc1 (patch)
tree1a1b846cfbb03678bd6be459e1fd62433c124ab7 /ppapi/shared_impl
parent533b73784cd84662b87827dddc92aaf8fc6786d6 (diff)
downloadchromium_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.cc21
-rw-r--r--ppapi/shared_impl/ppp_instance_combined.h14
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_;