diff options
author | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-25 20:50:32 +0000 |
---|---|---|
committer | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-25 20:50:32 +0000 |
commit | c0478b0985b9893601125a88a32a648656a75948 (patch) | |
tree | 8af9f0dcb303cbcdbf0da4c134f025d4e7ddd238 /webkit/glue/webplugin.h | |
parent | d4eb7120deddccf96ff85ecc393b0757497bb7d6 (diff) | |
download | chromium_src-c0478b0985b9893601125a88a32a648656a75948.zip chromium_src-c0478b0985b9893601125a88a32a648656a75948.tar.gz chromium_src-c0478b0985b9893601125a88a32a648656a75948.tar.bz2 |
linux: new socket/plug code for windowed plugins
This CL reworks the GtkSocket/GtkPlug code for windowed plugins on linux. Instead of having the plugin ask the browser to create a socket to plug into, it simply creates a plug and sends it to the browser. The browser creates a socket and attaches the plug when the socket becomes realized
This fixes 2 main issues:
- we can create windowed plugins in background tabs (Issue 16125)
- we can detach tabs with windowed plugins and reattach them (Issue 17110)
I reworked the IPCs, so it removes some amount of linux-specific things. We also need less synchronous IPCs to create/destroy plugins, so that should be a bit faster. In particular, I removed the plugin pid map, and instead made sure the renderer always destroys the plugin containers if the plugin process crashes - they will be destroyed if the renderer process crashes. Let me know if you have an issue with that.
Also, the intermediate plug/socket creation now happens in webplugin_delegate_impl_gtk. That means test_shell uses it as well. It made the code a lot simpler, and means we're testing it as well, albeit with a bit of extra overhead.
Bonus: I found a big bad bug in the GtkPluginContainer that made its width/height alias with some internal gtk structures. That was certainly causing some amounts of bugs.
Bonus 2: scrolling now looks more in sync with the rest of the page, though I'm not exactly sure which part caused that.
BUG=16125,17110
TEST=a lot of manual testing involving YouTube videos
Review URL: http://codereview.chromium.org/174295
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24309 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webplugin.h')
-rw-r--r-- | webkit/glue/webplugin.h | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/webkit/glue/webplugin.h b/webkit/glue/webplugin.h index d5f0cf6..886b031 100644 --- a/webkit/glue/webplugin.h +++ b/webkit/glue/webplugin.h @@ -25,7 +25,8 @@ struct NPObject; // Describes the new location for a plugin window. struct WebPluginGeometry { // On Windows, this is the plugin window in the plugin process. - // On X11, this is the browser process's hosting window (the GtkSocket). + // On X11, this is the XID of the plugin-side GtkPlug containing the + // GtkSocket hosting the actual plugin window. gfx::PluginWindowHandle window; gfx::Rect window_rect; // Clip rect (include) and cutouts (excludes), relative to @@ -51,13 +52,6 @@ class WebPlugin { WebPlugin() { } virtual ~WebPlugin() { } -#if defined(OS_LINUX) - // Called by the plugin delegate to request a container for a new - // windowed plugin. This handle will later get destroyed with - // WillDestroyWindow. - virtual gfx::PluginWindowHandle CreatePluginContainer() = 0; -#endif - // Called by the plugin delegate to let the WebPlugin know if the plugin is // windowed (i.e. handle is not NULL) or windowless (handle is NULL). This // tells the WebPlugin to send mouse/keyboard events to the plugin delegate, |