diff options
author | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-08 19:41:08 +0000 |
---|---|---|
committer | stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-08 19:41:08 +0000 |
commit | 1289b98a04a44eb64e74aeefa7c8affcde6ae89c (patch) | |
tree | fc2c2ff2d46c8d4e600007a900bc98a5b14c2372 /chrome/plugin/plugin_interpose_util_mac.h | |
parent | 8156e34de05c0eb074595ff7a3d850a22269bee8 (diff) | |
download | chromium_src-1289b98a04a44eb64e74aeefa7c8affcde6ae89c.zip chromium_src-1289b98a04a44eb64e74aeefa7c8affcde6ae89c.tar.gz chromium_src-1289b98a04a44eb64e74aeefa7c8affcde6ae89c.tar.bz2 |
Add Cocoa window interposing for plugin process
Adds support for noticing window show/hide done via Cocoa APIs. Also adds interposing on a couple more Carbon calls that I came across while debugging. Refactors to make things a bit less messy:
- Moves responsibility for re-activating the browser when the last plugin window closes into the browser, to simplify that logic.
- Moves utility method for activating the plugin process into the plugin, rather than the interpose library, so the Cocoa code can use it too.
- Add a data-holder and a couple of wrapper methods to reduce code duplication in the window show/hide handling.
BUG=28009, 29321
TEST=Plugin-opened windows (Gmail attachments, full-screen Flash, etc.) should work as expected again.
Review URL: http://codereview.chromium.org/465111
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34074 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/plugin/plugin_interpose_util_mac.h')
-rw-r--r-- | chrome/plugin/plugin_interpose_util_mac.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/chrome/plugin/plugin_interpose_util_mac.h b/chrome/plugin/plugin_interpose_util_mac.h new file mode 100644 index 0000000..c68d1f2 --- /dev/null +++ b/chrome/plugin/plugin_interpose_util_mac.h @@ -0,0 +1,38 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_PLUGIN_PLUGIN_INTERPOSE_UTIL_MAC_H_ +#define CHROME_PLUGIN_PLUGIN_INTERPOSE_UTIL_MAC_H_ + +#include <Carbon/Carbon.h> + +#import "base/basictypes.h" + +namespace mac_plugin_interposing { + +// Swizzles methods we need to watch in order to manage process and window +// focus correctly. +void SetUpCocoaInterposing(); + +// Brings the plugin process to the front so that the user can see its windows. +void SwitchToPluginProcess(); + +// Sends a message to the browser process to inform it that the given window +// has been brought forward. +void NotifyBrowserOfPluginSelectWindow(uint32 window_id, CGRect bounds, + bool modal); + +// Sends a message to the browser process to inform it that the given window +// has been shown. +void NotifyBrowserOfPluginShowWindow(uint32 window_id, CGRect bounds, + bool modal); + +// Sends a message to the browser process to inform it that the given window +// has been hidden, and switches focus back to the browser process if there are +// no remaining plugin windows. +void NotifyBrowserOfPluginHideWindow(uint32 window_id, CGRect bounds); + +} // namespace MacPluginInterpose + +#endif // CHROME_PLUGIN_PLUGIN_INTERPOSE_UTIL_MAC_H_ |