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/string_util.h" | 9 #include "base/string_util.h" |
10 #include "content/browser/browser_plugin/browser_plugin_embedder.h" | 10 #include "content/browser/browser_plugin/browser_plugin_embedder.h" |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 break; | 105 break; |
106 } | 106 } |
107 default: | 107 default: |
108 NOTREACHED() << "Unexpected notification sent."; | 108 NOTREACHED() << "Unexpected notification sent."; |
109 break; | 109 break; |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 bool BrowserPluginGuest::ViewTakeFocus(bool reverse) { | 113 bool BrowserPluginGuest::ViewTakeFocus(bool reverse) { |
114 SendMessageToEmbedder( | 114 SendMessageToEmbedder( |
115 new BrowserPluginMsg_AdvanceFocus(instance_id(), reverse)); | 115 new BrowserPluginMsg_AdvanceFocus(embedder_routing_id(), |
| 116 instance_id(), |
| 117 reverse)); |
116 return true; | 118 return true; |
117 } | 119 } |
118 | 120 |
119 void BrowserPluginGuest::Go(int relative_index) { | 121 void BrowserPluginGuest::Go(int relative_index) { |
120 web_contents()->GetController().GoToOffset(relative_index); | 122 web_contents()->GetController().GoToOffset(relative_index); |
121 } | 123 } |
122 | 124 |
123 bool BrowserPluginGuest::CanDownload(RenderViewHost* render_view_host, | 125 bool BrowserPluginGuest::CanDownload(RenderViewHost* render_view_host, |
124 int request_id, | 126 int request_id, |
125 const std::string& request_method) { | 127 const std::string& request_method) { |
(...skipping 25 matching lines...) Expand all Loading... |
151 } | 153 } |
152 | 154 |
153 bool BrowserPluginGuest::ShouldFocusPageAfterCrash() { | 155 bool BrowserPluginGuest::ShouldFocusPageAfterCrash() { |
154 // Rather than managing focus in WebContentsImpl::RenderViewReady, we will | 156 // Rather than managing focus in WebContentsImpl::RenderViewReady, we will |
155 // manage the focus ourselves. | 157 // manage the focus ourselves. |
156 return false; | 158 return false; |
157 } | 159 } |
158 | 160 |
159 void BrowserPluginGuest::SetIsAcceptingTouchEvents(bool accept) { | 161 void BrowserPluginGuest::SetIsAcceptingTouchEvents(bool accept) { |
160 SendMessageToEmbedder( | 162 SendMessageToEmbedder( |
161 new BrowserPluginMsg_ShouldAcceptTouchEvents(instance_id(), accept)); | 163 new BrowserPluginMsg_ShouldAcceptTouchEvents(embedder_routing_id(), |
| 164 instance_id(), |
| 165 accept)); |
162 } | 166 } |
163 | 167 |
164 void BrowserPluginGuest::SetVisibility(bool embedder_visible, bool visible) { | 168 void BrowserPluginGuest::SetVisibility(bool embedder_visible, bool visible) { |
165 visible_ = visible; | 169 visible_ = visible; |
166 if (embedder_visible && visible) | 170 if (embedder_visible && visible) |
167 web_contents()->WasShown(); | 171 web_contents()->WasShown(); |
168 else | 172 else |
169 web_contents()->WasHidden(); | 173 web_contents()->WasHidden(); |
170 } | 174 } |
171 | 175 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 // between the embedder and browser processes. | 298 // between the embedder and browser processes. |
295 DCHECK(*static_cast<unsigned int*>(damage_buffer->memory()) == 0xdeadbeef); | 299 DCHECK(*static_cast<unsigned int*>(damage_buffer->memory()) == 0xdeadbeef); |
296 damage_buffer_.reset(damage_buffer); | 300 damage_buffer_.reset(damage_buffer); |
297 #if defined(OS_WIN) | 301 #if defined(OS_WIN) |
298 damage_buffer_size_ = damage_buffer_size; | 302 damage_buffer_size_ = damage_buffer_size; |
299 #endif | 303 #endif |
300 damage_view_size_ = damage_view_size; | 304 damage_view_size_ = damage_view_size; |
301 damage_buffer_scale_factor_ = scale_factor; | 305 damage_buffer_scale_factor_ = scale_factor; |
302 } | 306 } |
303 | 307 |
| 308 int BrowserPluginGuest::embedder_routing_id() const { |
| 309 return embedder_web_contents_->GetRoutingID(); |
| 310 } |
| 311 |
304 bool BrowserPluginGuest::InAutoSizeBounds(const gfx::Size& size) const { | 312 bool BrowserPluginGuest::InAutoSizeBounds(const gfx::Size& size) const { |
305 return size.width() <= max_auto_size_.width() && | 313 return size.width() <= max_auto_size_.width() && |
306 size.height() <= max_auto_size_.height(); | 314 size.height() <= max_auto_size_.height(); |
307 } | 315 } |
308 | 316 |
309 void BrowserPluginGuest::UpdateRect( | 317 void BrowserPluginGuest::UpdateRect( |
310 RenderViewHost* render_view_host, | 318 RenderViewHost* render_view_host, |
311 const ViewHostMsg_UpdateRect_Params& params) { | 319 const ViewHostMsg_UpdateRect_Params& params) { |
312 RenderWidgetHostImpl* render_widget_host = | 320 RenderWidgetHostImpl* render_widget_host = |
313 RenderWidgetHostImpl::From(render_view_host); | 321 RenderWidgetHostImpl::From(render_view_host); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 params.flags); | 365 params.flags); |
358 | 366 |
359 // We need to send the ACK to the same render_view_host that issued | 367 // We need to send the ACK to the same render_view_host that issued |
360 // the UpdateRect. We keep track of this correspondence via a message_id. | 368 // the UpdateRect. We keep track of this correspondence via a message_id. |
361 int message_id = pending_update_counter_++; | 369 int message_id = pending_update_counter_++; |
362 pending_updates_.AddWithID(render_view_host, message_id); | 370 pending_updates_.AddWithID(render_view_host, message_id); |
363 | 371 |
364 gfx::Size param_size = gfx::Size(params.view_size.width(), | 372 gfx::Size param_size = gfx::Size(params.view_size.width(), |
365 params.view_size.height()); | 373 params.view_size.height()); |
366 | 374 |
367 SendMessageToEmbedder(new BrowserPluginMsg_UpdateRect(instance_id(), | 375 SendMessageToEmbedder(new BrowserPluginMsg_UpdateRect(embedder_routing_id(), |
| 376 instance_id(), |
368 message_id, | 377 message_id, |
369 relay_params)); | 378 relay_params)); |
370 } | 379 } |
371 | 380 |
372 void BrowserPluginGuest::UpdateRectACK(int message_id, const gfx::Size& size) { | 381 void BrowserPluginGuest::UpdateRectACK(int message_id, const gfx::Size& size) { |
373 RenderViewHost* render_view_host = pending_updates_.Lookup(message_id); | 382 RenderViewHost* render_view_host = pending_updates_.Lookup(message_id); |
374 // If the guest has crashed since it sent the initial ViewHostMsg_UpdateRect | 383 // If the guest has crashed since it sent the initial ViewHostMsg_UpdateRect |
375 // then the pending_updates_ map will have been cleared. | 384 // then the pending_updates_ map will have been cleared. |
376 if (!render_view_host) | 385 if (!render_view_host) |
377 return; | 386 return; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 void BrowserPluginGuest::ShowWidget(RenderViewHost* render_view_host, | 471 void BrowserPluginGuest::ShowWidget(RenderViewHost* render_view_host, |
463 int route_id, | 472 int route_id, |
464 const gfx::Rect& initial_pos) { | 473 const gfx::Rect& initial_pos) { |
465 gfx::Rect screen_pos(initial_pos); | 474 gfx::Rect screen_pos(initial_pos); |
466 screen_pos.Offset(guest_rect_.OffsetFromOrigin()); | 475 screen_pos.Offset(guest_rect_.OffsetFromOrigin()); |
467 static_cast<WebContentsImpl*>(web_contents())->ShowCreatedWidget(route_id, | 476 static_cast<WebContentsImpl*>(web_contents())->ShowCreatedWidget(route_id, |
468 screen_pos); | 477 screen_pos); |
469 } | 478 } |
470 | 479 |
471 void BrowserPluginGuest::SetCursor(const WebCursor& cursor) { | 480 void BrowserPluginGuest::SetCursor(const WebCursor& cursor) { |
472 SendMessageToEmbedder(new BrowserPluginMsg_SetCursor(instance_id(), cursor)); | 481 SendMessageToEmbedder(new BrowserPluginMsg_SetCursor(embedder_routing_id(), |
| 482 instance_id(), |
| 483 cursor)); |
473 } | 484 } |
474 | 485 |
475 void BrowserPluginGuest::DidStartProvisionalLoadForFrame( | 486 void BrowserPluginGuest::DidStartProvisionalLoadForFrame( |
476 int64 frame_id, | 487 int64 frame_id, |
477 int64 parent_frame_id, | 488 int64 parent_frame_id, |
478 bool is_main_frame, | 489 bool is_main_frame, |
479 const GURL& validated_url, | 490 const GURL& validated_url, |
480 bool is_error_page, | 491 bool is_error_page, |
481 RenderViewHost* render_view_host) { | 492 RenderViewHost* render_view_host) { |
482 // Inform the embedder of the loadStart. | 493 // Inform the embedder of the loadStart. |
483 SendMessageToEmbedder( | 494 SendMessageToEmbedder( |
484 new BrowserPluginMsg_LoadStart(instance_id(), | 495 new BrowserPluginMsg_LoadStart(embedder_routing_id(), |
| 496 instance_id(), |
485 validated_url, | 497 validated_url, |
486 is_main_frame)); | 498 is_main_frame)); |
487 } | 499 } |
488 | 500 |
489 void BrowserPluginGuest::DidFailProvisionalLoad( | 501 void BrowserPluginGuest::DidFailProvisionalLoad( |
490 int64 frame_id, | 502 int64 frame_id, |
491 bool is_main_frame, | 503 bool is_main_frame, |
492 const GURL& validated_url, | 504 const GURL& validated_url, |
493 int error_code, | 505 int error_code, |
494 const string16& error_description, | 506 const string16& error_description, |
495 RenderViewHost* render_view_host) { | 507 RenderViewHost* render_view_host) { |
496 // Translate the |error_code| into an error string. | 508 // Translate the |error_code| into an error string. |
497 std::string error_type; | 509 std::string error_type; |
498 RemoveChars(net::ErrorToString(error_code), "net::", &error_type); | 510 RemoveChars(net::ErrorToString(error_code), "net::", &error_type); |
499 // Inform the embedder of the loadAbort. | 511 // Inform the embedder of the loadAbort. |
500 SendMessageToEmbedder( | 512 SendMessageToEmbedder( |
501 new BrowserPluginMsg_LoadAbort(instance_id(), | 513 new BrowserPluginMsg_LoadAbort(embedder_routing_id(), |
| 514 instance_id(), |
502 validated_url, | 515 validated_url, |
503 is_main_frame, | 516 is_main_frame, |
504 error_type)); | 517 error_type)); |
505 } | 518 } |
506 | 519 |
507 void BrowserPluginGuest::LoadRedirect( | 520 void BrowserPluginGuest::LoadRedirect( |
508 const GURL& old_url, | 521 const GURL& old_url, |
509 const GURL& new_url, | 522 const GURL& new_url, |
510 bool is_top_level) { | 523 bool is_top_level) { |
511 SendMessageToEmbedder( | 524 SendMessageToEmbedder( |
512 new BrowserPluginMsg_LoadRedirect( | 525 new BrowserPluginMsg_LoadRedirect(embedder_routing_id(), |
513 instance_id(), old_url, new_url, is_top_level)); | 526 instance_id(), |
| 527 old_url, |
| 528 new_url, |
| 529 is_top_level)); |
514 } | 530 } |
515 | 531 |
516 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( | 532 void BrowserPluginGuest::DidCommitProvisionalLoadForFrame( |
517 int64 frame_id, | 533 int64 frame_id, |
518 bool is_main_frame, | 534 bool is_main_frame, |
519 const GURL& url, | 535 const GURL& url, |
520 PageTransition transition_type, | 536 PageTransition transition_type, |
521 RenderViewHost* render_view_host) { | 537 RenderViewHost* render_view_host) { |
522 // Inform its embedder of the updated URL. | 538 // Inform its embedder of the updated URL. |
523 BrowserPluginMsg_LoadCommit_Params params; | 539 BrowserPluginMsg_LoadCommit_Params params; |
524 params.url = url; | 540 params.url = url; |
525 params.is_top_level = is_main_frame; | 541 params.is_top_level = is_main_frame; |
526 params.process_id = render_view_host->GetProcess()->GetID(); | 542 params.process_id = render_view_host->GetProcess()->GetID(); |
527 params.current_entry_index = | 543 params.current_entry_index = |
528 web_contents()->GetController().GetCurrentEntryIndex(); | 544 web_contents()->GetController().GetCurrentEntryIndex(); |
529 params.entry_count = | 545 params.entry_count = |
530 web_contents()->GetController().GetEntryCount(); | 546 web_contents()->GetController().GetEntryCount(); |
531 SendMessageToEmbedder( | 547 SendMessageToEmbedder( |
532 new BrowserPluginMsg_LoadCommit(instance_id(), params)); | 548 new BrowserPluginMsg_LoadCommit(embedder_routing_id(), |
| 549 instance_id(), |
| 550 params)); |
533 RecordAction(UserMetricsAction("BrowserPlugin.Guest.DidNavigate")); | 551 RecordAction(UserMetricsAction("BrowserPlugin.Guest.DidNavigate")); |
534 } | 552 } |
535 | 553 |
536 void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) { | 554 void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) { |
537 SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(instance_id())); | 555 SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(embedder_routing_id(), |
| 556 instance_id())); |
538 } | 557 } |
539 | 558 |
540 void BrowserPluginGuest::RenderViewReady() { | 559 void BrowserPluginGuest::RenderViewReady() { |
541 // TODO(fsamuel): Investigate whether it's possible to update state earlier | 560 // TODO(fsamuel): Investigate whether it's possible to update state earlier |
542 // here (see http://www.crbug.com/158151). | 561 // here (see http://www.crbug.com/158151). |
543 RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); | 562 RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); |
544 render_view_host->Send( | 563 render_view_host->Send( |
545 new ViewMsg_SetFocus(render_view_host->GetRoutingID(), focused_)); | 564 new ViewMsg_SetFocus(render_view_host->GetRoutingID(), focused_)); |
546 bool embedder_visible = | 565 bool embedder_visible = |
547 embedder_web_contents_->GetBrowserPluginEmbedder()->visible(); | 566 embedder_web_contents_->GetBrowserPluginEmbedder()->visible(); |
548 SetVisibility(embedder_visible, visible()); | 567 SetVisibility(embedder_visible, visible()); |
549 if (auto_size_) { | 568 if (auto_size_) { |
550 web_contents()->GetRenderViewHost()->EnableAutoResize( | 569 web_contents()->GetRenderViewHost()->EnableAutoResize( |
551 min_auto_size_, max_auto_size_); | 570 min_auto_size_, max_auto_size_); |
552 } else { | 571 } else { |
553 web_contents()->GetRenderViewHost()->DisableAutoResize(damage_view_size_); | 572 web_contents()->GetRenderViewHost()->DisableAutoResize(damage_view_size_); |
554 } | 573 } |
555 } | 574 } |
556 | 575 |
557 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { | 576 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { |
558 if (pending_input_event_reply_.get()) { | 577 if (pending_input_event_reply_.get()) { |
559 IPC::Message* reply_message = pending_input_event_reply_.release(); | 578 IPC::Message* reply_message = pending_input_event_reply_.release(); |
560 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams(reply_message, | 579 BrowserPluginHostMsg_HandleInputEvent::WriteReplyParams(reply_message, |
561 false); | 580 false); |
562 SendMessageToEmbedder(reply_message); | 581 SendMessageToEmbedder(reply_message); |
563 } | 582 } |
564 int process_id = web_contents()->GetRenderProcessHost()->GetID(); | 583 int process_id = web_contents()->GetRenderProcessHost()->GetID(); |
565 SendMessageToEmbedder(new BrowserPluginMsg_GuestGone(instance_id(), | 584 SendMessageToEmbedder(new BrowserPluginMsg_GuestGone(embedder_routing_id(), |
| 585 instance_id(), |
566 process_id, | 586 process_id, |
567 status)); | 587 status)); |
568 IDMap<RenderViewHost>::const_iterator iter(&pending_updates_); | 588 IDMap<RenderViewHost>::const_iterator iter(&pending_updates_); |
569 while (!iter.IsAtEnd()) { | 589 while (!iter.IsAtEnd()) { |
570 pending_updates_.Remove(iter.GetCurrentKey()); | 590 pending_updates_.Remove(iter.GetCurrentKey()); |
571 iter.Advance(); | 591 iter.Advance(); |
572 } | 592 } |
573 | 593 |
574 switch (status) { | 594 switch (status) { |
575 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: | 595 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: |
576 RecordAction(UserMetricsAction("BrowserPlugin.Guest.Killed")); | 596 RecordAction(UserMetricsAction("BrowserPlugin.Guest.Killed")); |
577 break; | 597 break; |
578 case base::TERMINATION_STATUS_PROCESS_CRASHED: | 598 case base::TERMINATION_STATUS_PROCESS_CRASHED: |
579 RecordAction(UserMetricsAction("BrowserPlugin.Guest.Crashed")); | 599 RecordAction(UserMetricsAction("BrowserPlugin.Guest.Crashed")); |
580 break; | 600 break; |
581 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: | 601 case base::TERMINATION_STATUS_ABNORMAL_TERMINATION: |
582 RecordAction(UserMetricsAction("BrowserPlugin.Guest.AbnormalDeath")); | 602 RecordAction(UserMetricsAction("BrowserPlugin.Guest.AbnormalDeath")); |
583 break; | 603 break; |
584 default: | 604 default: |
585 break; | 605 break; |
586 } | 606 } |
587 } | 607 } |
588 | 608 |
589 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { | 609 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { |
590 embedder_web_contents_->GetRenderProcessHost()->Send(msg); | 610 embedder_web_contents_->GetRenderProcessHost()->Send(msg); |
591 } | 611 } |
592 | 612 |
593 } // namespace content | 613 } // namespace content |
OLD | NEW |