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) 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#ifndef CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_REGISTRY_H_ 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#define CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_REGISTRY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/memory/ref_counted.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/pepper_plugin_info.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace content { 1558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass PluginModule; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class holds references to all of the known pepper plugin modules. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It keeps two lists. One list of preloaded in-process modules, and one list 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is a list of all live modules (some of which may be out-of-process and hence 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// not preloaded). 22bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochclass PepperPluginRegistry { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~PepperPluginRegistry(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PepperPluginRegistry* GetInstance(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the information associated with the given plugin info. The 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // return value will be NULL if there is no such plugin. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The returned pointer is owned by the PluginRegistry. 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const PepperPluginInfo* GetInfoForPlugin(const WebPluginInfo& info); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns an existing loaded module for the given path. It will search for 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // both preloaded in-process or currently active (non crashed) out-of-process 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // plugins matching the given name. Returns NULL if the plugin hasn't been 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded. 3858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PluginModule* GetLiveModule(const base::FilePath& path); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the registry that a new non-preloaded module has been created. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is normally called for out-of-process plugins. Once this is called, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the module is available to be returned by GetModule(). The module will 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // automatically unregister itself by calling PluginModuleDestroyed(). 4458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch void AddLiveModule(const base::FilePath& path, PluginModule* module); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch void PluginModuleDead(PluginModule* dead_module); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PepperPluginRegistry(); 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void Initialize(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All known pepper plugins. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PepperPluginInfo> plugin_list_; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Plugins that have been preloaded so they can be executed in-process in 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the renderer (the sandbox prevents on-demand loading). 5758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch typedef std::map<base::FilePath, scoped_refptr<PluginModule> > 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningModuleMap; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningModuleMap preloaded_modules_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A list of non-owning pointers to all currently-live plugin modules. This 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // includes both preloaded ones in preloaded_modules_, and out-of-process 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modules whose lifetime is managed externally. This will contain only 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-crashed modules. If an out-of-process module crashes, it may 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // continue as long as there are WebKit references to it, but it will not 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // appear in this list. 6758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch typedef std::map<base::FilePath, PluginModule*> NonOwningModuleMap; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NonOwningModuleMap live_modules_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PepperPluginRegistry); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#endif // CONTENT_RENDERER_PEPPER_PEPPER_PLUGIN_REGISTRY_H_ 76