OLD | NEW |
---|---|
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 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
438 // {WebDragStatusOver, WebDragStatusDrop}. However, if a user drags | 438 // {WebDragStatusOver, WebDragStatusDrop}. However, if a user drags |
439 // a source quickly outside of <webview> bounds, then the | 439 // a source quickly outside of <webview> bounds, then the |
440 // BrowserPluginGuest never sees any of these drag status updates, | 440 // BrowserPluginGuest never sees any of these drag status updates, |
441 // there we just check whether we've seen any drag status update or | 441 // there we just check whether we've seen any drag status update or |
442 // not. | 442 // not. |
443 if (last_drag_status_ != blink::WebDragStatusOver && | 443 if (last_drag_status_ != blink::WebDragStatusOver && |
444 seen_embedder_drag_source_ended_at_ && seen_embedder_system_drag_ended_) { | 444 seen_embedder_drag_source_ended_at_ && seen_embedder_system_drag_ended_) { |
445 RenderViewHostImpl* guest_rvh = static_cast<RenderViewHostImpl*>( | 445 RenderViewHostImpl* guest_rvh = static_cast<RenderViewHostImpl*>( |
446 GetWebContents()->GetRenderViewHost()); | 446 GetWebContents()->GetRenderViewHost()); |
447 guest_rvh->DragSourceSystemDragEnded(); | 447 guest_rvh->DragSourceSystemDragEnded(); |
448 | |
449 last_drag_status_ = blink::WebDragStatusUnknown; | 448 last_drag_status_ = blink::WebDragStatusUnknown; |
450 seen_embedder_system_drag_ended_ = false; | 449 seen_embedder_system_drag_ended_ = false; |
451 seen_embedder_drag_source_ended_at_ = false; | 450 seen_embedder_drag_source_ended_at_ = false; |
451 dragged_url_ = GURL(); | |
452 } | 452 } |
453 } | 453 } |
454 | 454 |
455 void BrowserPluginGuest::EmbedderSystemDragEnded() { | 455 void BrowserPluginGuest::EmbedderSystemDragEnded() { |
456 seen_embedder_system_drag_ended_ = true; | 456 seen_embedder_system_drag_ended_ = true; |
457 EndSystemDragIfApplicable(); | 457 EndSystemDragIfApplicable(); |
458 } | 458 } |
459 | 459 |
460 void BrowserPluginGuest::SendQueuedMessages() { | 460 void BrowserPluginGuest::SendQueuedMessages() { |
461 if (!attached()) | 461 if (!attached()) |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
667 | 667 |
668 delegate_->DidDetach(); | 668 delegate_->DidDetach(); |
669 } | 669 } |
670 | 670 |
671 void BrowserPluginGuest::OnDragStatusUpdate(int browser_plugin_instance_id, | 671 void BrowserPluginGuest::OnDragStatusUpdate(int browser_plugin_instance_id, |
672 blink::WebDragStatus drag_status, | 672 blink::WebDragStatus drag_status, |
673 const DropData& drop_data, | 673 const DropData& drop_data, |
674 blink::WebDragOperationsMask mask, | 674 blink::WebDragOperationsMask mask, |
675 const gfx::Point& location) { | 675 const gfx::Point& location) { |
676 RenderViewHost* host = GetWebContents()->GetRenderViewHost(); | 676 RenderViewHost* host = GetWebContents()->GetRenderViewHost(); |
677 auto embedder = owner_web_contents_->GetBrowserPluginEmbedder(); | |
677 switch (drag_status) { | 678 switch (drag_status) { |
678 case blink::WebDragStatusEnter: | 679 case blink::WebDragStatusEnter: |
679 owner_web_contents_->GetBrowserPluginEmbedder()->DragEnteredGuest( | 680 // Only track the URL being dragged over the guest if the link isn't |
680 this); | 681 // coming from the guest. |
682 if (!embedder->DragEnteredGuest(this)) | |
683 dragged_url_ = drop_data.url; | |
lazyboy
2015/02/23 17:11:10
Just double checking, if the drop data doesn't hav
Fady Samuel
2015/02/23 19:57:07
Yup, the GURL is not valid, and spec() is empty st
| |
681 host->DragTargetDragEnter(drop_data, location, location, mask, 0); | 684 host->DragTargetDragEnter(drop_data, location, location, mask, 0); |
682 break; | 685 break; |
683 case blink::WebDragStatusOver: | 686 case blink::WebDragStatusOver: |
684 host->DragTargetDragOver(location, location, mask, 0); | 687 host->DragTargetDragOver(location, location, mask, 0); |
685 break; | 688 break; |
686 case blink::WebDragStatusLeave: | 689 case blink::WebDragStatusLeave: |
687 owner_web_contents_->GetBrowserPluginEmbedder()->DragLeftGuest(this); | 690 owner_web_contents_->GetBrowserPluginEmbedder()->DragLeftGuest(this); |
lazyboy
2015/02/23 17:11:10
Also, change this to use |embedder|
Fady Samuel
2015/02/23 19:57:07
Done.
| |
688 host->DragTargetDragLeave(); | 691 host->DragTargetDragLeave(); |
689 break; | 692 break; |
690 case blink::WebDragStatusDrop: | 693 case blink::WebDragStatusDrop: |
691 host->DragTargetDrop(location, location, 0); | 694 host->DragTargetDrop(location, location, 0); |
695 if (dragged_url_.is_valid()) { | |
696 delegate_->DidDropLink(dragged_url_); | |
697 dragged_url_ = GURL(); | |
698 } | |
692 break; | 699 break; |
693 case blink::WebDragStatusUnknown: | 700 case blink::WebDragStatusUnknown: |
694 NOTREACHED(); | 701 NOTREACHED(); |
695 } | 702 } |
696 last_drag_status_ = drag_status; | 703 last_drag_status_ = drag_status; |
697 EndSystemDragIfApplicable(); | 704 EndSystemDragIfApplicable(); |
698 } | 705 } |
699 | 706 |
700 void BrowserPluginGuest::OnExecuteEditCommand(int browser_plugin_instance_id, | 707 void BrowserPluginGuest::OnExecuteEditCommand(int browser_plugin_instance_id, |
701 const std::string& name) { | 708 const std::string& name) { |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
904 void BrowserPluginGuest::OnImeCompositionRangeChanged( | 911 void BrowserPluginGuest::OnImeCompositionRangeChanged( |
905 const gfx::Range& range, | 912 const gfx::Range& range, |
906 const std::vector<gfx::Rect>& character_bounds) { | 913 const std::vector<gfx::Rect>& character_bounds) { |
907 static_cast<RenderWidgetHostViewBase*>( | 914 static_cast<RenderWidgetHostViewBase*>( |
908 web_contents()->GetRenderWidgetHostView())->ImeCompositionRangeChanged( | 915 web_contents()->GetRenderWidgetHostView())->ImeCompositionRangeChanged( |
909 range, character_bounds); | 916 range, character_bounds); |
910 } | 917 } |
911 #endif | 918 #endif |
912 | 919 |
913 } // namespace content | 920 } // namespace content |
OLD | NEW |