| Index: chrome/plugin/plugin_main.cc
|
| diff --git a/chrome/plugin/plugin_main.cc b/chrome/plugin/plugin_main.cc
|
| index 63d295d15d0bf794005c8acc3563034f542f910e..afc83a5145e75388f6cdeaff785447b6db157641 100644
|
| --- a/chrome/plugin/plugin_main.cc
|
| +++ b/chrome/plugin/plugin_main.cc
|
| @@ -25,8 +25,45 @@
|
| #elif defined(OS_LINUX)
|
| #include "base/global_descriptors_posix.h"
|
| #include "ipc/ipc_descriptors.h"
|
| +#elif defined(OS_MACOSX)
|
| +#include "chrome/common/plugin_carbon_interpose_constants_mac.h"
|
| #endif
|
|
|
| +#if defined(OS_MACOSX)
|
| +// Removes our Carbon library interposing from the environment so that it
|
| +// doesn't carry into any processes that plugins might start.
|
| +static void TrimInterposeEnvironment() {
|
| + const char* interpose_list =
|
| + getenv(plugin_interpose_strings::kDYLDInsertLibrariesKey);
|
| + if (!interpose_list) {
|
| + NOTREACHED() << "No interposing libraries set";
|
| + return;
|
| + }
|
| +
|
| + // The list is a :-separated list of paths. Because we append our interpose
|
| + // library just before forking in plugin_process_host.cc, the only cases we
|
| + // need to handle are:
|
| + // 1) The whole string is "<kInterposeLibraryPath>", so just clear it, or
|
| + // 2) ":<kInterposeLibraryPath>" is the end of the string, so trim and re-set.
|
| + int suffix_offset = strlen(interpose_list) -
|
| + strlen(plugin_interpose_strings::kInterposeLibraryPath);
|
| + if (suffix_offset == 0 &&
|
| + strcmp(interpose_list,
|
| + plugin_interpose_strings::kInterposeLibraryPath) == 0) {
|
| + unsetenv(plugin_interpose_strings::kDYLDInsertLibrariesKey);
|
| + } else if (suffix_offset > 0 && interpose_list[suffix_offset - 1] == ':' &&
|
| + strcmp(interpose_list + suffix_offset,
|
| + plugin_interpose_strings::kInterposeLibraryPath) == 0) {
|
| + std::string trimmed_list =
|
| + std::string(interpose_list).substr(0, suffix_offset - 1);
|
| + setenv(plugin_interpose_strings::kDYLDInsertLibrariesKey,
|
| + trimmed_list.c_str(), 1);
|
| + } else {
|
| + NOTREACHED() << "Missing Carbon interposing library";
|
| + }
|
| +}
|
| +#endif // OS_MACOSX
|
| +
|
| // main() routine for running as the plugin process.
|
| int PluginMain(const MainFunctionParams& parameters) {
|
| // The main thread of the plugin services UI.
|
| @@ -37,6 +74,10 @@ int PluginMain(const MainFunctionParams& parameters) {
|
| // Initialize the SystemMonitor
|
| base::SystemMonitor::Start();
|
|
|
| +#if defined(OS_MACOSX)
|
| + TrimInterposeEnvironment();
|
| +#endif
|
| +
|
| const CommandLine& parsed_command_line = parameters.command_line_;
|
|
|
| #if defined(OS_WIN)
|
|
|