summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/plugin_resource_tracker.h
Commit message (Collapse)AuthorAgeFilesLines
* Reland 9034035: Make it possible to have 1 PpapiGlobals per thread.dmichael@chromium.org2012-01-121-5/+1
| | | | | | | | | | | | | | | | Original CL: r117399, http://codereview.chromium.org/9034035/ Reverted in r117414, http://codereview.chromium.org/9139054/ due to a static initializer. This is the same as r117399 except using a LazyInstance to eliminate the static initializer. BUG= TEST= TBR=dmichael@chromium.org Review URL: http://codereview.chromium.org/9187055 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117475 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 117399 - Make it possible to have 1 PpapiGlobals per thread. Update ↵tommi@chromium.org2012-01-121-1/+5
| | | | | | | | | | | | | | | | | | | unit tests. Reason for rever: Broke the sizes check on the mac clobber bot. This allows us to distinguish trackers in the unit tests, instead of all vars/resources going in 1 tracker. This should also allow us to unit-test PPB proxies. BUG= TEST= Review URL: http://codereview.chromium.org/9034035 TBR=dmichael@chromium.org Review URL: http://codereview.chromium.org/9139054 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117414 0039d316-1c4b-4281-b951-d872f2087c98
* Make it possible to have 1 PpapiGlobals per thread. Update unit tests.dmichael@chromium.org2012-01-121-5/+1
| | | | | | | | | | | | This allows us to distinguish trackers in the unit tests, instead of all vars/resources going in 1 tracker. This should also allow us to unit-test PPB proxies. BUG= TEST= Review URL: http://codereview.chromium.org/9034035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117399 0039d316-1c4b-4281-b951-d872f2087c98
* Cleanup: Remove unneeded forward declarations in ppapi.thestig@chromium.org2011-11-111-4/+0
| | | | | | | | BUG=none TEST=none Review URL: http://codereview.chromium.org/8527020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109595 0039d316-1c4b-4281-b951-d872f2087c98
* Remove TrackerBase.brettw@chromium.org2011-10-201-10/+1
| | | | | | | | | | | | | | Fold the methods it provided into the PpapiGlobals base class. Move the instance and module tracking in the webkit/plugins/ppapi dir out of the HostResourceTracker (since it has nothing to do with resources) and into the HostGlobals object (which provides general global object tracking). TEST=none BUG=none Review URL: http://codereview.chromium.org/8335001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106612 0039d316-1c4b-4281-b951-d872f2087c98
* Add a new globals object for PPAPI tracking information.brettw@chromium.org2011-10-201-36/+2
| | | | | | | | | | | | | | | | | | | | [ Reland of 106142: http://codereview.chromium.org/8316008 ] This adds a specialization on the host and plugin side of the proxy. This replaces the ad-hoc singleton tracking done by the resource and var trackers with just being getters on this global object. Most code can use the single PpapiGlobals class. I also allow code to get the host and plugin specializations since some code needs access to some specific features of each side. In a later pass I'll move the other stuff out of TrackerBase and delete it. TEST=none BUG=none Review URL: http://codereview.chromium.org/8344025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106537 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 106142 - Add a new globals object for PPAPI tracking information.sail@chromium.org2011-10-181-2/+36
| | | | | | | | | | | | | | | | | | | | | | This adds a specialization on the host and plugin side of the proxy. This replaces the ad-hoc singleton tracking done by the resource and var trackers with just being getters on this global object. Most code can use the single PpapiGlobals class. I also allow code to get the host and plugin specializations since some code needs access to some specific features of each side. In a later pass I'll move the other stuff out of TrackerBase and delete it. TEST=none BUG=none Review URL: http://codereview.chromium.org/8316008 TBR=brettw@chromium.org Review URL: http://codereview.chromium.org/8342016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106148 0039d316-1c4b-4281-b951-d872f2087c98
* Add a new globals object for PPAPI tracking information.brettw@chromium.org2011-10-181-36/+2
| | | | | | | | | | | | | | | | | | | This adds a specialization on the host and plugin side of the proxy. This replaces the ad-hoc singleton tracking done by the resource and var trackers with just being getters on this global object. Most code can use the single PpapiGlobals class. I also allow code to get the host and plugin specializations since some code needs access to some specific features of each side. In a later pass I'll move the other stuff out of TrackerBase and delete it. TEST=none BUG=none Review URL: http://codereview.chromium.org/8316008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106142 0039d316-1c4b-4281-b951-d872f2087c98
* Add global lock for Enter* classes. Add ScopedProxyLock for non-thunk ↵dmichael@chromium.org2011-10-111-0/+4
| | | | | | | | | | | proxies. Add multi-threading test for PPB_Var. BUG=92909 TEST=None yet Review URL: http://codereview.chromium.org/8016008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104931 0039d316-1c4b-4281-b951-d872f2087c98
* Create ppapi_proxy.dll and ppapi_shared.dll.darin@chromium.org2011-08-261-1/+3
| | | | | | | | | | | | | | | | This involves introducing the following macros: PPAPI_PROXY_EXPORT - for symbols exported from ppapi/proxy PPAPI_SHARED_EXPORT - for symbols exported from ppapi/shared_impl PPAPI_THUNK_EXPORT - for symbols exported from ppapi/thunk NOTE: shared_impl and thunk are still linked together, but I thought it was cleaner to give thunk its own macro. R=brettw@chromium.org Review URL: http://codereview.chromium.org/7687005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98508 0039d316-1c4b-4281-b951-d872f2087c98
* Merge the plugin and impl side of the audio config and input event resources.brettw@chromium.org2011-08-251-0/+1
| | | | | | | | | | Now that we have a unified resource system, we no longer need the duplication on both sides of the proxy. This resource is now implemented entirely in shared_impl. Review URL: http://codereview.chromium.org/7621070 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98185 0039d316-1c4b-4281-b951-d872f2087c98
* Convert the pp::proxy namespace to the ppapi::proxy namespace.brettw@chromium.org2011-08-181-15/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is more consistent with the stuff in shared_impl, and removes a lot of namespace using goop. Add a unified resource tracker shared between the proxy and the impl. This renames the old ResourceObjectBase to Resource and removes the old PluginResource. It moves the resource tracker from the impl to the shared_impl, and makes the proxy use it. Some things become a little less neat because there's no proxy resource base class. In particular GetDispatcher() is now gone. I considered whether to add a helper base class that provides this function, but decided against it and had individual resource classes implement this when their implementation would find it useful. This is because ultimately I want more of this functionality to move into the shared_impl, and it's easier to do that if there are fewer proxy-specific things in the resources. This changes the way that plugins are added to the tracker. Previously they would only be in the tracker if the plugin had a reference to them, although they could be alive if the impl had a scoped_ptr referencing an object. This actually has the bug that if we then give the resource back to the plugin, it wouldn't be refcounted properly and everything would get confused. Now the tracker tracks all live resource objects whether or not the plugin has a ref. This works basically like the var tracker (it would be nice if the var and resource trackers shared more code, but that would further complicate this already overcomplicated patch). The resource tracker takes an extra ref whenever the plugin has one or more, and otherwise just tracks live resources. BUG= TEST= Review URL: http://codereview.chromium.org/7655002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97367 0039d316-1c4b-4281-b951-d872f2087c98
* Add a unified resource tracker shared between the proxy and the impl.brettw@chromium.org2011-08-181-43/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This renames the old ResourceObjectBase to Resource and removes the old PluginResource. It moves the resource tracker from the impl to the shared_impl, and makes the proxy use it. Some things become a little less neat because there's no proxy resource base class. In particular GetDispatcher() is now gone. I considered whether to add a helper base class that provides this function, but decided against it and had individual resource classes implement this when their implementation would find it useful. This is because ultimately I want more of this functionality to move into the shared_impl, and it's easier to do that if there are fewer proxy-specific things in the resources. This changes the way that plugins are added to the tracker. Previously they would only be in the tracker if the plugin had a reference to them, although they could be alive if the impl had a scoped_ptr referencing an object. This actually has the bug that if we then give the resource back to the plugin, it wouldn't be refcounted properly and everything would get confused. Now the tracker tracks all live resource objects whether or not the plugin has a ref. This works basically like the var tracker (it would be nice if the var and resource trackers shared more code, but that would further complicate this already overcomplicated patch). The resource tracker takes an extra ref whenever the plugin has one or more, and otherwise just tracks live resources. Review URL: http://codereview.chromium.org/7629017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@97314 0039d316-1c4b-4281-b951-d872f2087c98
* Move host resource from the proxy to the shared_impl.brettw@chromium.org2011-08-131-3/+3
| | | | | | | | | | | This is needed by my new unified resoruce tracker, which will use this file from the shared_impl in the new resource base object. I fixed up the namespaces for the callers. Longer term, I want to put the proxy in the ppapi namespace which will eliminate some of this mess. Review URL: http://codereview.chromium.org/7623018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96678 0039d316-1c4b-4281-b951-d872f2087c98
* Convert the PluginResource to be refcounted.brettw@chromium.org2011-08-111-4/+5
| | | | | | | | | This is to make the future transition to a shared resource tracker (which will use refcounted resources) easier. There should be no behavior change. Review URL: http://codereview.chromium.org/7608030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96324 0039d316-1c4b-4281-b951-d872f2087c98
* Unify var tracking between webkit and the proxy.brettw@chromium.org2011-08-091-6/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | This replaces the var tracking in the proxy with the var tracking in the shared_impl that's used by the implementation. It adds a new ProxyObjectVar to be the proxied plugin analog of NPObjectVar in the impl. This new object just keeps track of the host data. The tricky part is to make the var tracker able to do all the crazy messaging. This adds some virtual functions to the shared var tracker that we override in the plugin in PluginVarTracker. This removes the calls to the GetLiveObjectsForInstance in the var deprecated test. It turns out this function really can't be implemented properly in the proxy, and I don't know why it even worked before. A Release() call posts a non-nestable task so the object isn't released until later. So to implement the proxy for GetLiveObjectsForInstance we would also need to post a non-nestable task. But when the test runs we're getting called from within the plugin, so blocking on a non-nestable task deadlocks. So I just gave up and deleted the parts of the test that uses it. TEST=included BUG=none Review URL: http://codereview.chromium.org/7578001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96094 0039d316-1c4b-4281-b951-d872f2087c98
* Move Var and StringVar to the ppapi/shared_impl so they can be used in thebrettw@chromium.org2011-08-011-0/+8
| | | | | | | | | | | | | | | | | | | proxy. This does not, however, actually use these in the proxy yet, I'll do that in a subsequent pass. ObjectVar is now renamed NPObjectVar and continues to be in webkit/plugins since it uses NPObjects. There will be a corresponding future class in the proxy for proxied objects. The TryCatch that was in var.h is now in npapi_glue.h Most of the rest of the change is updating namespaces. TEST=unit tests BUG=none Review URL: http://codereview.chromium.org/7488062 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94986 0039d316-1c4b-4281-b951-d872f2087c98
* Make o.o.p. proxy handle PPP_Instance versions 0.4 and 0.5.dmichael@chromium.org2011-06-291-1/+1
| | | | | | | | | | | Move & tweak PPP_Instance_Combined to ppapi_shared so the proxy can use it. Use versioned PPP_Instance types only. BUG=82606 TEST=run tests o.o.p. Review URL: http://codereview.chromium.org/7189045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90984 0039d316-1c4b-4281-b951-d872f2087c98
* roll clang 131935:132017thakis@chromium.org2011-06-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | clang recently added a warning that warns when invoking 'delete' on a polymorphic non-final class without a virtual destructor. This finds real bugs – see the bug referenced below for a few examples. However, one common pattern where it fires is this case: class SomeInterface { public: virtual void interfaceMethod() {} // or = 0; protected: ~SomeInterface() {} } class WorkerClass : public SomeInterface { public: // many non-virtual functions, but also: virtual void interfaceMethod() override { /* do actual work */ } }; void f() { scoped_ptr<WorkerClass> c(new WorkerClass); // simplified example } (See the 2nd half of http://www.gotw.ca/publications/mill18.htm for an explanation of this pattern.) It is arguably correct to fire the warning here, since someone might make a subclass of WorkerClass and replace |new WorkerClass| with |new WorkerClassSubclass|. This would be broken since WorkerClass doesn't have a virtual destructor. The solution that the clang folks recommend is to mark WorkerClass as |final| (a c++0x keyword that clang supports as an extension in normal c++ mode – like override). But chrome's base/OWNERS deemed that as too complicated and we decided to make virtual the destructors of leaf classes that implement these interfaces and that are deleted dynamically. All of the changes in this CL are to shut up the warning, not because of real problems (I fixed these in separate CLs). (For the gtk files, this is necessary because the CHROMEGTK_CALLBACK_ macros add virtual functions.) BUG=84424 TEST=none Review URL: http://codereview.chromium.org/7087028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88270 0039d316-1c4b-4281-b951-d872f2087c98
* Convert more interfaces to the new thunk system. This goes up to and includingbrettw@chromium.org2011-06-011-2/+4
| | | | | | | | | | | | | | | the ones starting with "F". Since this adds a lot more interfaces, I added the macro stuff we used for the old system to generate the various template specializations. This involded a lot of renaming since the As* needs to match the name (I was previously leaving off the "PPB_" part). I did other misc cleanup to the infrastructure. Review URL: http://codereview.chromium.org/7082036 Reland 87415 Review URL: http://codereview.chromium.org/7105013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87444 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 87415 - Convert more interfaces to the new thunk system. This goes up ↵thestig@chromium.org2011-06-011-4/+2
| | | | | | | | | | | | | | | | | to and including the ones starting with "F". Since this adds a lot more interfaces, I added the macro stuff we used for the old system to generate the various template specializations. This involded a lot of renaming since the As* needs to match the name (I was previously leaving off the "PPB_" part). I did other misc cleanup to the infrastructure. Review URL: http://codereview.chromium.org/7082036 TBR=brettw@chromium.org Review URL: http://codereview.chromium.org/7006022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87438 0039d316-1c4b-4281-b951-d872f2087c98
* Convert more interfaces to the new thunk system. This goes up to and includingbrettw@chromium.org2011-06-011-2/+4
| | | | | | | | | | | | the ones starting with "F". Since this adds a lot more interfaces, I added the macro stuff we used for the old system to generate the various template specializations. This involded a lot of renaming since the As* needs to match the name (I was previously leaving off the "PPB_" part). I did other misc cleanup to the infrastructure. Review URL: http://codereview.chromium.org/7082036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87415 0039d316-1c4b-4281-b951-d872f2087c98
* Convert audio-related messages to the new thunk/API system for Pepper.brettw@chromium.org2011-05-131-4/+4
| | | | | | | | | | | | | | | | | | | This has a bit of a change from the previous couple of resources that were converted in that the ResourceCreationProxy now calls a static proxy function for actually doing the work. It became too complicated and required that the ResourceCreationProxy know a lot about the internals of the objects. Did a little namespace cleanup. This renames "pp::shared_impl" to just use the "ppapi" namespace. The "shared_impl" was ugly and didn't help anything. Some files in that directory used "ppapi::shared_impl" instead which was even more confusing. Do a little build cleanup. The old ppapi_shared_proxy.gypi is now split into two sub-files, one for ppapi_shared, and one for ppapi_proxy. It's hopefully easier to find stuff now. Review URL: http://codereview.chromium.org/7014024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85303 0039d316-1c4b-4281-b951-d872f2087c98
* This implements the new system for Graphics2D only.brettw@chromium.org2011-05-061-1/+10
| | | | | | | | | | | This works by adding a new thunk layer that will forward to an "API" that's either per-instance (function APIs) or per-resource (resource APIs). The proxying and such is then implemented in terms of this C++ API. Ideally the trackers of the PP_Resource/PP_Instance -> object mapping would be shared between the plugin and renderer processes. To keep this patch under control, I did this as a virtual base class which is implemented by ppapi::proxy::PluginResourceTracker and webkit::ppapi::ResourceTracker. Later, the functionality of these objects should be shared in a common tracker class. Still to do it a lot of cleanup and merging of things. Also, the namespaces are a bit out of control. Review URL: http://codereview.chromium.org/6905088 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84519 0039d316-1c4b-4281-b951-d872f2087c98
* Fix resource destruction in proxypiman@google.com2011-04-011-5/+0
| | | | | | | | | | | | | | | This ensures that the resource on the plugin side is destroyed before we send the message to the host, so that it has a chance to do proper cleanup. Also, fix Surface3D destruction that could cause a write-after-free. BUG=none TEST=go to youtube with out-of-process pepper flash. click on fullscreen. observe no hang, no crash Review URL: http://codereview.chromium.org/6771042 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80188 0039d316-1c4b-4281-b951-d872f2087c98
* Move some files from base to base/memory.levin@chromium.org2011-03-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | raw_scoped_refptr_mismatch_checker.h ref_counted.cc ref_counted.h ref_counted_memory.cc ref_counted_memory.h ref_counted_unittest.cc scoped_callback_factory.h scoped_comptr_win.h scoped_handle.h scoped_native_library.cc scoped_native_library.h scoped_native_library_unittest.cc scoped_nsobject.h scoped_open_process.h scoped_ptr.h scoped_ptr_unittest.cc scoped_temp_dir.cc scoped_temp_dir.h scoped_temp_dir_unittest.cc scoped_vector.h singleton.h singleton_objc.h singleton_unittest.cc linked_ptr.h linked_ptr_unittest.cc weak_ptr.cc weak_ptr.h weak_ptr_unittest.cc BUG=None TEST=Compile Review URL: http://codereview.chromium.org/6714032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79524 0039d316-1c4b-4281-b951-d872f2087c98
* Refactor PPAPI proxy resource handling to maintain which host they came from,brettw@chromium.org2011-01-271-25/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and to map back to that host when calling functions on them. Adds a mapping between resources generated by the hosts to a new list inside the plugin so there can't be overlaps. This means there are now two meanings for a PP_Resource, one in the plugin process and one in the host process. This is potentially very confusing. I introduced a new object called a HostResource that always represents a "host" PP_Resource to try to prevent errors. In the plugin side of the proxy, it only deals with PP_Resources valid in the plugin, and SerializedResources valid in the host. It also encapsulates the associated instance, which simplifies some code. Each PluginResource object maintains its SerializedResource which the proxy uses to send to the host for requests. This requires getting the PluginResource object in more proxy calls. This fixes a bug in var sending introduced in my previous patch. The var releasing from EndSendPassRef used the host var rather than the plugin var. I had to add more plumbing to get the dispatcher at this location and convert to a plugin var. I removed the separate file for ImageData and put it in ppb_image_data_proxy like for the other resource types. TEST=some unit tests included BUG=none Review URL: http://codereview.chromium.org/6334016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72879 0039d316-1c4b-4281-b951-d872f2087c98
* First pass at making the proxy handle multiple renderers. This associates thebrettw@chromium.org2011-01-211-7/+16
| | | | | | | | | | | | | | | | | | | | instance with resources and has most callers retrieve the dispatcher according to the appropriate instance. This isn't hooked up to anything yet. This changes some PPB_Flash interface methods to use PP_Bool. The most challenging part of the change is in the plugin_var_tracker which now needs to track which dispatcher each var object came from, and remap var IDs since each renderer will be generating var IDs in its own space, which will likely overlap. A similar system will need to be done for resources which is not implemented yet. I added some null checks in audio_impl because audio_ can be NULL in some cases when using the trusted API. I discovered this when testing NaCl for this patch. Review URL: http://codereview.chromium.org/6282007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72053 0039d316-1c4b-4281-b951-d872f2087c98
* Random updates for all added proxy interfaces I've done in the past week.brettw@chromium.org2010-11-091-0/+25
| | | | | | | | TEST=none BUG=none Review URL: http://codereview.chromium.org/4609001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65543 0039d316-1c4b-4281-b951-d872f2087c98
* Core PPAPI proxy files. This includes the dispatcher which is the control pointbrettw@chromium.org2010-11-031-0/+62
| | | | | | | | | | | | on each end of the IPC channel. It includes the IPC message definitions. It also includes the base class for the interface proxying, and the core resource and var tracking. BUG=none TEST=none Review=http://codereview.chromium.org/4229002/show git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64874 0039d316-1c4b-4281-b951-d872f2087c98
* Revert PPAPI proxy change with too many files in it.brettw@chromium.org2010-11-031-62/+0
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64870 0039d316-1c4b-4281-b951-d872f2087c98
* Core PPAPI proxy files. This includes the dispatcher which is the control pointbrettw@chromium.org2010-11-031-0/+62
on each end of the IPC channel. It includes the IPC message definitions. It also includes the base class for the interface proxying, and the core resource and var tracking. BUG=none TEST=none Review URL: http://codereview.chromium.org/4229002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64869 0039d316-1c4b-4281-b951-d872f2087c98