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 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
437 cc::SurfaceManager* manager = GetSurfaceManager(); | 437 cc::SurfaceManager* manager = GetSurfaceManager(); |
438 cc::Surface* surface = manager->GetSurfaceForId(id); | 438 cc::Surface* surface = manager->GetSurfaceForId(id); |
439 if (!surface) { | 439 if (!surface) { |
440 LOG(ERROR) << "Attempting to require callback on nonexistent surface"; | 440 LOG(ERROR) << "Attempting to require callback on nonexistent surface"; |
441 return; | 441 return; |
442 } | 442 } |
443 surface->AddDestructionDependency(sequence); | 443 surface->AddDestructionDependency(sequence); |
444 } | 444 } |
445 | 445 |
446 void BrowserPluginGuest::SetContentsOpaque(bool opaque) { | 446 void BrowserPluginGuest::SetContentsOpaque(bool opaque) { |
447 SendMessageToEmbedder( | 447 SendMessageToEmbedder([opaque](int browser_plugin_instance_id) { |
448 new BrowserPluginMsg_SetContentsOpaque( | 448 return new BrowserPluginMsg_SetContentsOpaque(browser_plugin_instance_id, |
449 browser_plugin_instance_id(), opaque)); | 449 opaque); |
450 }); | |
450 } | 451 } |
451 | 452 |
452 bool BrowserPluginGuest::Find(int request_id, | 453 bool BrowserPluginGuest::Find(int request_id, |
453 const base::string16& search_text, | 454 const base::string16& search_text, |
454 const blink::WebFindOptions& options) { | 455 const blink::WebFindOptions& options) { |
455 return delegate_->Find(request_id, search_text, options); | 456 return delegate_->Find(request_id, search_text, options); |
456 } | 457 } |
457 | 458 |
458 bool BrowserPluginGuest::StopFinding(StopFindAction action) { | 459 bool BrowserPluginGuest::StopFinding(StopFindAction action) { |
459 return delegate_->StopFinding(action); | 460 return delegate_->StopFinding(action); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
497 gfx::Point BrowserPluginGuest::GetScreenCoordinates( | 498 gfx::Point BrowserPluginGuest::GetScreenCoordinates( |
498 const gfx::Point& relative_position) const { | 499 const gfx::Point& relative_position) const { |
499 if (!attached()) | 500 if (!attached()) |
500 return relative_position; | 501 return relative_position; |
501 | 502 |
502 gfx::Point screen_pos(relative_position); | 503 gfx::Point screen_pos(relative_position); |
503 screen_pos += guest_window_rect_.OffsetFromOrigin(); | 504 screen_pos += guest_window_rect_.OffsetFromOrigin(); |
504 return screen_pos; | 505 return screen_pos; |
505 } | 506 } |
506 | 507 |
508 // TODO(wjmaclean): Remove this function once all messages are handled with | |
509 // functionals. | |
507 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { | 510 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { |
508 // During tests, attache() may be true when there is no owner_web_contents_; | 511 // During tests, attache() may be true when there is no owner_web_contents_; |
509 // in this case just queue any messages we receive. | 512 // in this case just queue any messages we receive. |
510 if (!attached() || !owner_web_contents_) { | 513 if (!attached() || !owner_web_contents_) { |
511 // Some pages such as data URLs, javascript URLs, and about:blank | 514 // Some pages such as data URLs, javascript URLs, and about:blank |
512 // do not load external resources and so they load prior to attachment. | 515 // do not load external resources and so they load prior to attachment. |
513 // As a result, we must save all these IPCs until attachment and then | 516 // As a result, we must save all these IPCs until attachment and then |
514 // forward them so that the embedder gets a chance to see and process | 517 // forward them so that the embedder gets a chance to see and process |
515 // the load events. | 518 // the load events. |
516 pending_messages_.push_back(linked_ptr<IPC::Message>(msg)); | 519 pending_messages_.push_back(linked_ptr<IPC::Message>(msg)); |
517 return; | 520 return; |
518 } | 521 } |
519 owner_web_contents_->Send(msg); | 522 owner_web_contents_->Send(msg); |
520 } | 523 } |
521 | 524 |
525 void BrowserPluginGuest::SendMessageToEmbedder( | |
526 BrowserPluginMessageFunc msg_func) { | |
527 // During tests, attache() may be true when there is no owner_web_contents_; | |
lazyboy
2015/10/16 00:15:48
attached()
| |
528 // in this case just queue any messages we receive. | |
529 if (!attached() || !owner_web_contents_) { | |
530 // Some pages such as data URLs, javascript URLs, and about:blank | |
531 // do not load external resources and so they load prior to attachment. | |
532 // As a result, we must save all these IPCs until attachment and then | |
533 // forward them so that the embedder gets a chance to see and process | |
534 // the load events. | |
535 pending_message_funcs_.push_back(msg_func); | |
536 return; | |
537 } | |
538 owner_web_contents_->Send(msg_func(browser_plugin_instance_id())); | |
539 } | |
540 | |
522 void BrowserPluginGuest::DragSourceEndedAt(int client_x, int client_y, | 541 void BrowserPluginGuest::DragSourceEndedAt(int client_x, int client_y, |
523 int screen_x, int screen_y, blink::WebDragOperation operation) { | 542 int screen_x, int screen_y, blink::WebDragOperation operation) { |
524 web_contents()->GetRenderViewHost()->DragSourceEndedAt(client_x, client_y, | 543 web_contents()->GetRenderViewHost()->DragSourceEndedAt(client_x, client_y, |
525 screen_x, screen_y, operation); | 544 screen_x, screen_y, operation); |
526 seen_embedder_drag_source_ended_at_ = true; | 545 seen_embedder_drag_source_ended_at_ = true; |
527 EndSystemDragIfApplicable(); | 546 EndSystemDragIfApplicable(); |
528 } | 547 } |
529 | 548 |
530 void BrowserPluginGuest::EndSystemDragIfApplicable() { | 549 void BrowserPluginGuest::EndSystemDragIfApplicable() { |
531 // Ideally we'd want either WebDragStatusDrop or WebDragStatusLeave... | 550 // Ideally we'd want either WebDragStatusDrop or WebDragStatusLeave... |
(...skipping 29 matching lines...) Expand all Loading... | |
561 | 580 |
562 void BrowserPluginGuest::EmbedderSystemDragEnded() { | 581 void BrowserPluginGuest::EmbedderSystemDragEnded() { |
563 seen_embedder_system_drag_ended_ = true; | 582 seen_embedder_system_drag_ended_ = true; |
564 EndSystemDragIfApplicable(); | 583 EndSystemDragIfApplicable(); |
565 } | 584 } |
566 | 585 |
567 void BrowserPluginGuest::SendQueuedMessages() { | 586 void BrowserPluginGuest::SendQueuedMessages() { |
568 if (!attached()) | 587 if (!attached()) |
569 return; | 588 return; |
570 | 589 |
590 // TODO(wjmaclean): Remove this block once all messages are handled with | |
591 // functionals. | |
571 while (!pending_messages_.empty()) { | 592 while (!pending_messages_.empty()) { |
572 linked_ptr<IPC::Message> message_ptr = pending_messages_.front(); | 593 linked_ptr<IPC::Message> message_ptr = pending_messages_.front(); |
Fady Samuel
2015/10/16 02:48:43
Perhaps you can grab the payload of the IPC::Messa
| |
573 pending_messages_.pop_front(); | 594 pending_messages_.pop_front(); |
574 SendMessageToEmbedder(message_ptr.release()); | 595 SendMessageToEmbedder(message_ptr.release()); |
575 } | 596 } |
597 | |
598 while (!pending_message_funcs_.empty()) { | |
lazyboy
2015/10/16 00:15:48
Having two queues will send messages out of order,
| |
599 SendMessageToEmbedder( | |
600 pending_message_funcs_.front()(browser_plugin_instance_id())); | |
601 pending_message_funcs_.pop_front(); | |
602 } | |
576 } | 603 } |
577 | 604 |
578 void BrowserPluginGuest::SendTextInputTypeChangedToView( | 605 void BrowserPluginGuest::SendTextInputTypeChangedToView( |
579 RenderWidgetHostViewBase* guest_rwhv) { | 606 RenderWidgetHostViewBase* guest_rwhv) { |
580 if (!guest_rwhv) | 607 if (!guest_rwhv) |
581 return; | 608 return; |
582 | 609 |
583 if (!owner_web_contents_) { | 610 if (!owner_web_contents_) { |
584 // If we were showing an interstitial, then we can end up here during | 611 // If we were showing an interstitial, then we can end up here during |
585 // embedder shutdown or when the embedder navigates to a different page. | 612 // embedder shutdown or when the embedder navigates to a different page. |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1011 range, character_bounds); | 1038 range, character_bounds); |
1012 } | 1039 } |
1013 #endif | 1040 #endif |
1014 | 1041 |
1015 void BrowserPluginGuest::SetContextMenuPosition(const gfx::Point& position) { | 1042 void BrowserPluginGuest::SetContextMenuPosition(const gfx::Point& position) { |
1016 if (delegate_) | 1043 if (delegate_) |
1017 delegate_->SetContextMenuPosition(position); | 1044 delegate_->SetContextMenuPosition(position); |
1018 } | 1045 } |
1019 | 1046 |
1020 } // namespace content | 1047 } // namespace content |
OLD | NEW |