diff options
author | stuartmorgan@google.com <stuartmorgan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-07 22:03:17 +0000 |
---|---|---|
committer | stuartmorgan@google.com <stuartmorgan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-07 22:03:17 +0000 |
commit | f3ef7b1c17b3f9a1db703a7b099e697e401d21a9 (patch) | |
tree | c6252141eeb6637bb2a4630d1735bbf965933a56 /chrome/browser/plugin_process_host.cc | |
parent | 1ef7ccfa171759ab86cdf6b98cf5145b9db688b0 (diff) | |
download | chromium_src-f3ef7b1c17b3f9a1db703a7b099e697e401d21a9.zip chromium_src-f3ef7b1c17b3f9a1db703a7b099e697e401d21a9.tar.gz chromium_src-f3ef7b1c17b3f9a1db703a7b099e697e401d21a9.tar.bz2 |
Set up a interposing library for Carbon calls made by plugins.
This gives us a library that's inserted into plugin process via DYLD_INSERT_LIBRARIES to intercept Carbon calls, and moves the window/process activation handling into that library (based on Carbon window activation/deactivation calls, rather than polling the front window). Over time we'll interpose more, but this gives us the foundation.
This fixes both the "window loses focus when loading a page with plugins" and "can't click on YouTube controls" bugs.
BUG=18203,18553
TEST=Clicking on Flash plugins should work much more reliably, opening a page with a plugin shouldn't cause the window to lose focus.
Review URL: http://codereview.chromium.org/164100
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22799 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/plugin_process_host.cc')
-rw-r--r-- | chrome/browser/plugin_process_host.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/chrome/browser/plugin_process_host.cc b/chrome/browser/plugin_process_host.cc index d57daae..3c5f169 100644 --- a/chrome/browser/plugin_process_host.cc +++ b/chrome/browser/plugin_process_host.cc @@ -64,6 +64,10 @@ #include "base/gfx/gtk_native_view_id_manager.h" #endif +#if defined(OS_MACOSX) +#include "chrome/common/plugin_carbon_interpose_constants_mac.h" +#endif + static const char kDefaultPluginFinderURL[] = "http://dl.google.com/chrome/plugins/plugins2.xml"; @@ -410,7 +414,22 @@ bool PluginProcessHost::Init(const WebPluginInfo& info, if (ipcfd > -1) fds_to_map.push_back(std::pair<int, int>( ipcfd, kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor)); - base::LaunchApp(cmd_line.argv(), fds_to_map, false, &process); + base::environment_vector env; +#if defined(OS_MACOSX) + // Add our interposing library for Carbon. This is stripped back out in + // plugin_main.cc, so changes here should be reflected there. + std::string interpose_list(plugin_interpose_strings::kInterposeLibraryPath); + const char* existing_list = + getenv(plugin_interpose_strings::kDYLDInsertLibrariesKey); + if (existing_list) { + interpose_list.insert(0, ":"); + interpose_list.insert(0, existing_list); + } + env.push_back(std::pair<const char*, const char*>( + plugin_interpose_strings::kDYLDInsertLibrariesKey, + interpose_list.c_str())); +#endif + base::LaunchApp(cmd_line.argv(), env, fds_to_map, false, &process); #endif if (!process) |