| Index: chrome/common/pepper_plugin_registry.cc
|
| diff --git a/chrome/common/pepper_plugin_registry.cc b/chrome/common/pepper_plugin_registry.cc
|
| index 0a23ecaaa91346d5149f335922d6e178d2fc39b7..e7771c4b719861fa408ef1fb81a4d94af98380d7 100644
|
| --- a/chrome/common/pepper_plugin_registry.cc
|
| +++ b/chrome/common/pepper_plugin_registry.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/command_line.h"
|
| #include "base/string_util.h"
|
| #include "chrome/common/chrome_switches.h"
|
| +#include "remoting/client/plugin/pepper_entrypoints.h"
|
|
|
| // static
|
| PepperPluginRegistry* PepperPluginRegistry::GetInstance() {
|
| @@ -16,6 +17,21 @@ PepperPluginRegistry* PepperPluginRegistry::GetInstance() {
|
|
|
| // static
|
| void PepperPluginRegistry::GetList(std::vector<PepperPluginInfo>* plugins) {
|
| + InternalPluginInfoList internal_plugin_info;
|
| + GetInternalPluginInfo(&internal_plugin_info);
|
| + for (InternalPluginInfoList::const_iterator it =
|
| + internal_plugin_info.begin();
|
| + it != internal_plugin_info.end();
|
| + ++it) {
|
| + plugins->push_back(*it);
|
| + }
|
| +
|
| + GetPluginInfoFromSwitch(plugins);
|
| +}
|
| +
|
| +// static
|
| +void PepperPluginRegistry::GetPluginInfoFromSwitch(
|
| + std::vector<PepperPluginInfo>* plugins) {
|
| const std::wstring& value = CommandLine::ForCurrentProcess()->GetSwitchValue(
|
| switches::kRegisterPepperPlugins);
|
| if (value.empty())
|
| @@ -44,6 +60,35 @@ void PepperPluginRegistry::GetList(std::vector<PepperPluginInfo>* plugins) {
|
| }
|
| }
|
|
|
| +// static
|
| +void PepperPluginRegistry::GetInternalPluginInfo(
|
| + InternalPluginInfoList* plugin_info) {
|
| + // Currently, to centralize the internal plugin registration logic, we
|
| + // hardcode the list of plugins, mimetypes, and registration information
|
| + // in this function. This is gross, but because the GetList() function is
|
| + // called from both the renderer and browser the other option is to force a
|
| + // special register function for each plugin to be called by both
|
| + // RendererMain() and BrowserMain(). This seemed like the better tradeoff.
|
| + //
|
| + // TODO(ajwong): Think up a better way to maintain the plugin registration
|
| + // information. Pehraps by construction of a singly linked list of
|
| + // plugin initializers that is built with static initializers?
|
| +
|
| +#if defined(ENABLE_REMOTING)
|
| + InternalPluginInfo info;
|
| + // Add the chromoting plugin.
|
| + info.path =
|
| + FilePath(FILE_PATH_LITERAL("internal-chromoting"));
|
| + info.mime_types.push_back("pepper-application/x-chromoting");
|
| + info.entry_points.get_interface = remoting::PPP_GetInterface;
|
| + info.entry_points.initialize_module = remoting::PPP_InitializeModule;
|
| + info.entry_points.shutdown_module = remoting::PPP_ShutdownModule;
|
| +
|
| + plugin_info->push_back(info);
|
| +#endif
|
| +
|
| +}
|
| +
|
| pepper::PluginModule* PepperPluginRegistry::GetModule(
|
| const FilePath& path) const {
|
| ModuleMap::const_iterator it = modules_.find(path);
|
| @@ -53,8 +98,27 @@ pepper::PluginModule* PepperPluginRegistry::GetModule(
|
| }
|
|
|
| PepperPluginRegistry::PepperPluginRegistry() {
|
| + InternalPluginInfoList internal_plugin_info;
|
| + GetInternalPluginInfo(&internal_plugin_info);
|
| + // Register modules for these suckers.
|
| + for (InternalPluginInfoList::const_iterator it =
|
| + internal_plugin_info.begin();
|
| + it != internal_plugin_info.end();
|
| + ++it) {
|
| + const FilePath& path = it->path;
|
| + ModuleHandle module =
|
| + pepper::PluginModule::CreateInternalModule(it->entry_points);
|
| + if (!module) {
|
| + DLOG(ERROR) << "Failed to load pepper module: " << path.value();
|
| + continue;
|
| + }
|
| + modules_[path] = module;
|
| + }
|
| +
|
| + // Add the modules specified on the command line last so that they can
|
| + // override the internal plugins.
|
| std::vector<PepperPluginInfo> plugins;
|
| - GetList(&plugins);
|
| + GetPluginInfoFromSwitch(&plugins);
|
| for (size_t i = 0; i < plugins.size(); ++i) {
|
| const FilePath& path = plugins[i].path;
|
| ModuleHandle module = pepper::PluginModule::CreateModule(path);
|
|
|