summaryrefslogtreecommitdiffstats
path: root/chrome/browser/plugin_process_host.cc
diff options
context:
space:
mode:
authorstuartmorgan@google.com <stuartmorgan@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-07 22:03:17 +0000
committerstuartmorgan@google.com <stuartmorgan@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-07 22:03:17 +0000
commitf3ef7b1c17b3f9a1db703a7b099e697e401d21a9 (patch)
treec6252141eeb6637bb2a4630d1735bbf965933a56 /chrome/browser/plugin_process_host.cc
parent1ef7ccfa171759ab86cdf6b98cf5145b9db688b0 (diff)
downloadchromium_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.cc21
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)