Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Unified Diff: webkit/glue/webplugin_impl.cc

Issue 549025: Set disabled style on GPU window and plugin intermediate window so mouse mess... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/webplugin_impl.h ('k') | webkit/webkit.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/webplugin_impl.cc
===================================================================
--- webkit/glue/webplugin_impl.cc (revision 36167)
+++ webkit/glue/webplugin_impl.cc (working copy)
@@ -250,51 +250,53 @@
void WebPluginImpl::updateGeometry(
const WebRect& window_rect, const WebRect& clip_rect,
const WebVector<WebRect>& cutout_rects, bool is_visible) {
- if (window_ && page_delegate_) {
- // Notify the window hosting the plugin (the WebViewDelegate) that
- // it needs to adjust the plugin, so that all the HWNDs can be moved
- // at the same time.
- WebPluginGeometry move;
- move.window = window_;
- move.window_rect = window_rect;
- move.clip_rect = clip_rect;
- for (size_t i = 0; i < cutout_rects.size(); ++i)
- move.cutout_rects.push_back(cutout_rects[i]);
- move.rects_valid = true;
- move.visible = is_visible;
+ WebPluginGeometry new_geometry;
+ new_geometry.window = window_;
+ new_geometry.window_rect = window_rect;
+ new_geometry.clip_rect = clip_rect;
+ new_geometry.visible = is_visible;
+ new_geometry.rects_valid = true;
+ for (size_t i = 0; i < cutout_rects.size(); ++i)
+ new_geometry.cutout_rects.push_back(cutout_rects[i]);
- page_delegate_->DidMovePlugin(move);
+ // Only send DidMovePlugin if the geometry changed in some way.
+ if (window_ &&
+ page_delegate_ &&
+ (first_geometry_update_ || !new_geometry.Equals(geometry_))) {
+ page_delegate_->DidMovePlugin(new_geometry);
}
- if (first_geometry_update_ || window_rect != window_rect_ ||
- clip_rect != clip_rect_) {
- window_rect_ = window_rect;
- clip_rect_ = clip_rect;
+ // Only UpdateGeometry if either the window or clip rects have changed.
+ if (first_geometry_update_ ||
+ new_geometry.window_rect != geometry_.window_rect ||
+ new_geometry.clip_rect != geometry_.clip_rect) {
// Notify the plugin that its parameters have changed.
- delegate_->UpdateGeometry(window_rect_, clip_rect_);
+ delegate_->UpdateGeometry(new_geometry.window_rect, new_geometry.clip_rect);
+ }
- // Initiate a download on the plugin url. This should be done for the
- // first update geometry sequence. We need to ensure that the plugin
- // receives the geometry update before it starts receiving data.
- if (first_geometry_update_) {
- first_geometry_update_ = false;
- // An empty url corresponds to an EMBED tag with no src attribute.
- if (!load_manually_ && plugin_url_.is_valid()) {
- // The Flash plugin hangs for a while if it receives data before
- // receiving valid plugin geometry. By valid geometry we mean the
- // geometry received by a call to setFrameRect in the Webkit
- // layout code path. To workaround this issue we download the
- // plugin source url on a timer.
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE, method_factory_.NewRunnableMethod(
- &WebPluginImpl::OnDownloadPluginSrcUrl), 0);
- }
+ // Initiate a download on the plugin url. This should be done for the
+ // first update geometry sequence. We need to ensure that the plugin
+ // receives the geometry update before it starts receiving data.
+ if (first_geometry_update_) {
+ // An empty url corresponds to an EMBED tag with no src attribute.
+ if (!load_manually_ && plugin_url_.is_valid()) {
+ // The Flash plugin hangs for a while if it receives data before
+ // receiving valid plugin geometry. By valid geometry we mean the
+ // geometry received by a call to setFrameRect in the Webkit
+ // layout code path. To workaround this issue we download the
+ // plugin source url on a timer.
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, method_factory_.NewRunnableMethod(
+ &WebPluginImpl::OnDownloadPluginSrcUrl), 0);
}
}
+
+ first_geometry_update_ = false;
+ geometry_ = new_geometry;
}
void WebPluginImpl::updateFocus(bool focused) {
- if (focused && windowless_)
+ if (focused && accepts_input_events_)
delegate_->SetFocus();
}
@@ -313,7 +315,7 @@
}
bool WebPluginImpl::acceptsInputEvents() {
- return windowless_;
+ return accepts_input_events_;
}
bool WebPluginImpl::handleInputEvent(
@@ -374,6 +376,7 @@
const base::WeakPtr<WebPluginPageDelegate>& page_delegate)
: windowless_(false),
window_(NULL),
+ accepts_input_events_(false),
page_delegate_(page_delegate),
webframe_(webframe),
delegate_(NULL),
@@ -400,6 +403,7 @@
if (window) {
DCHECK(!windowless_);
window_ = window;
+ accepts_input_events_ = false;
if (page_delegate_) {
// Tell the view delegate that the plugin window was created, so that it
// can create necessary container widgets.
@@ -408,6 +412,7 @@
} else {
DCHECK(!window_); // Make sure not called twice.
windowless_ = true;
+ accepts_input_events_ = true;
}
}
« no previous file with comments | « webkit/glue/webplugin_impl.h ('k') | webkit/webkit.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698