15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_SHARED_IMPL_PPP_INSTANCE_COMBINED_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_SHARED_IMPL_PPP_INSTANCE_COMBINED_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppp_instance.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_shared_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This exposes the 1.1 interface and forwards it to the 1.0 interface is 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// necessary. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPAPI_SHARED_EXPORT PPP_Instance_Combined { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a PPP_Instance_Combined. Uses the given |get_interface_func| to 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // query the plugin and find the most recent version of the PPP_Instance 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interface. If the plugin doesn't support any PPP_Instance interface, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns NULL. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PPP_Instance_Combined* Create( 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Callback<const void*(const char*)> get_plugin_if); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Bool DidCreate(PP_Instance instance, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t argc, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* argn[], 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* argv[]); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidDestroy(PP_Instance instance); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This version of DidChangeView encapsulates all arguments for both 1.0 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and 1.1 versions of this function. Conversion from 1.1 -> 1.0 is easy, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but this class doesn't have the necessary context (resource interfaces) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to do the conversion, so the caller must do it. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidChangeView(PP_Instance instance, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource view_changed_resource, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct PP_Rect* position, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct PP_Rect* clip); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidChangeFocus(PP_Instance instance, PP_Bool has_focus); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Bool HandleDocumentLoad(PP_Instance instance, PP_Resource url_loader); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit PPP_Instance_Combined(const PPP_Instance_1_0& instance_if); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit PPP_Instance_Combined(const PPP_Instance_1_1& instance_if); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For version 1.0, DidChangeView will be NULL, and DidChangeView_1_0 will 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be set below. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPP_Instance_1_1 instance_1_1_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non-NULL when Instance 1.0 is used. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void (*did_change_view_1_0_)(PP_Instance instance, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct PP_Rect* position, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct PP_Rect* clip); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PPP_Instance_Combined); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // PPAPI_SHARED_IMPL_PPP_INSTANCE_COMBINED_H_ 63