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

Side by Side Diff: content/browser/browser_plugin/browser_plugin_guest.cc

Issue 1308273003: Resend unconsumed scroll update from guest back to embedder (WebView Scroll Bubble). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove GestureEventObserver now that we don't forward fling GestureScrollUpdates. Created 5 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/browser_plugin/browser_plugin_guest.h" 5 #include "content/browser/browser_plugin/browser_plugin_guest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/pickle.h" 10 #include "base/pickle.h"
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 bool BrowserPluginGuest::Find(int request_id, 465 bool BrowserPluginGuest::Find(int request_id,
466 const base::string16& search_text, 466 const base::string16& search_text,
467 const blink::WebFindOptions& options) { 467 const blink::WebFindOptions& options) {
468 return delegate_->Find(request_id, search_text, options); 468 return delegate_->Find(request_id, search_text, options);
469 } 469 }
470 470
471 bool BrowserPluginGuest::StopFinding(StopFindAction action) { 471 bool BrowserPluginGuest::StopFinding(StopFindAction action) {
472 return delegate_->StopFinding(action); 472 return delegate_->StopFinding(action);
473 } 473 }
474 474
475 void BrowserPluginGuest::ResendEventToEmbedder(
476 const blink::WebInputEvent& event) {
477 if (!attached() || !owner_web_contents_)
478 return;
479
480 DCHECK(browser_plugin_instance_id_);
481 RenderViewHost* rvh = embedder_web_contents()->GetRenderViewHost();
kenrb 2015/09/14 15:48:51 I would prefer if you accessed the main RenderFram
wjmaclean 2015/09/14 20:47:21 Done.
482
483 if (event.type == blink::WebInputEvent::GestureScrollUpdate) {
484 blink::WebGestureEvent resent_gesture_event;
485 memcpy(&resent_gesture_event, &event, sizeof(blink::WebGestureEvent));
486 // Mark the resend source with the browser plugin's instance id, so the
487 // correct browser_plugin will know to ignore the event.
488 resent_gesture_event.resendSource = browser_plugin_instance_id_;
489 RenderWidgetHostImpl* host = RenderWidgetHostImpl::From(rvh);
490 bool needs_wrapping = !host->is_in_gesture_scroll();
491 if (needs_wrapping) {
492 blink::WebGestureEvent wrap_gesture_scroll_begin;
493 wrap_gesture_scroll_begin.type = blink::WebInputEvent::GestureScrollBegin;
494 wrap_gesture_scroll_begin.data.scrollBegin.deltaXHint = 0;
495 wrap_gesture_scroll_begin.data.scrollBegin.deltaYHint = 0;
496 wrap_gesture_scroll_begin.resendSource = browser_plugin_instance_id_;
497 host->ForwardGestureEvent(wrap_gesture_scroll_begin);
498 }
499 host->ForwardGestureEvent(resent_gesture_event);
500 if (needs_wrapping) {
501 blink::WebGestureEvent wrap_gesture_scroll_end;
502 wrap_gesture_scroll_end.type = blink::WebInputEvent::GestureScrollEnd;
503 wrap_gesture_scroll_end.resendSource = browser_plugin_instance_id_;
504 host->ForwardGestureEvent(wrap_gesture_scroll_end);
505 }
506 } else if (event.type == blink::WebInputEvent::MouseWheel) {
507 blink::WebMouseWheelEvent resent_wheel_event;
508 memcpy(&resent_wheel_event, &event, sizeof(blink::WebMouseWheelEvent));
509 resent_wheel_event.resendSource = browser_plugin_instance_id_;
510 RenderWidgetHostImpl::From(rvh)->ForwardWheelEvent(resent_wheel_event);
511 } else {
512 NOTIMPLEMENTED();
513 }
514
515 }
516
475 WebContentsImpl* BrowserPluginGuest::GetWebContents() const { 517 WebContentsImpl* BrowserPluginGuest::GetWebContents() const {
476 return static_cast<WebContentsImpl*>(web_contents()); 518 return static_cast<WebContentsImpl*>(web_contents());
477 } 519 }
478 520
479 gfx::Point BrowserPluginGuest::GetScreenCoordinates( 521 gfx::Point BrowserPluginGuest::GetScreenCoordinates(
480 const gfx::Point& relative_position) const { 522 const gfx::Point& relative_position) const {
481 if (!attached()) 523 if (!attached())
482 return relative_position; 524 return relative_position;
483 525
484 gfx::Point screen_pos(relative_position); 526 gfx::Point screen_pos(relative_position);
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 range, character_bounds); 1042 range, character_bounds);
1001 } 1043 }
1002 #endif 1044 #endif
1003 1045
1004 void BrowserPluginGuest::SetContextMenuPosition(const gfx::Point& position) { 1046 void BrowserPluginGuest::SetContextMenuPosition(const gfx::Point& position) {
1005 if (delegate_) 1047 if (delegate_)
1006 delegate_->SetContextMenuPosition(position); 1048 delegate_->SetContextMenuPosition(position);
1007 } 1049 }
1008 1050
1009 } // namespace content 1051 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698