| 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/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 gfx::Rect RenderWidget::ScreenMetricsEmulator::AdjustValidationMessageAnchor( | 461 gfx::Rect RenderWidget::ScreenMetricsEmulator::AdjustValidationMessageAnchor( |
| 462 const gfx::Rect& anchor) { | 462 const gfx::Rect& anchor) { |
| 463 gfx::Rect scaled = gfx::ToEnclosedRect(gfx::ScaleRect(anchor, scale_)); | 463 gfx::Rect scaled = gfx::ToEnclosedRect(gfx::ScaleRect(anchor, scale_)); |
| 464 scaled.set_x(scaled.x() + offset_.x()); | 464 scaled.set_x(scaled.x() + offset_.x()); |
| 465 scaled.set_y(scaled.y() + offset_.y()); | 465 scaled.set_y(scaled.y() + offset_.y()); |
| 466 return scaled; | 466 return scaled; |
| 467 } | 467 } |
| 468 | 468 |
| 469 // RenderWidget --------------------------------------------------------------- | 469 // RenderWidget --------------------------------------------------------------- |
| 470 | 470 |
| 471 RenderWidget::RenderWidget(blink::WebPopupType popup_type, | 471 RenderWidget::RenderWidget(CompositorDependencies* compositor_deps, |
| 472 blink::WebPopupType popup_type, |
| 472 const blink::WebScreenInfo& screen_info, | 473 const blink::WebScreenInfo& screen_info, |
| 473 bool swapped_out, | 474 bool swapped_out, |
| 474 bool hidden, | 475 bool hidden, |
| 475 bool never_visible) | 476 bool never_visible) |
| 476 : routing_id_(MSG_ROUTING_NONE), | 477 : routing_id_(MSG_ROUTING_NONE), |
| 477 surface_id_(0), | 478 surface_id_(0), |
| 478 compositor_deps_(nullptr), | 479 compositor_deps_(compositor_deps), |
| 479 webwidget_(nullptr), | 480 webwidget_(nullptr), |
| 480 opener_id_(MSG_ROUTING_NONE), | 481 opener_id_(MSG_ROUTING_NONE), |
| 481 init_complete_(false), | 482 init_complete_(false), |
| 482 top_controls_shrink_blink_size_(false), | 483 top_controls_shrink_blink_size_(false), |
| 483 top_controls_height_(0.f), | 484 top_controls_height_(0.f), |
| 484 next_paint_flags_(0), | 485 next_paint_flags_(0), |
| 485 auto_resize_mode_(false), | 486 auto_resize_mode_(false), |
| 486 need_update_rect_for_auto_resize_(false), | 487 need_update_rect_for_auto_resize_(false), |
| 487 did_show_(false), | 488 did_show_(false), |
| 488 is_hidden_(hidden), | 489 is_hidden_(hidden), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 if (!is_swapped_out_ && RenderProcess::current()) | 534 if (!is_swapped_out_ && RenderProcess::current()) |
| 534 RenderProcess::current()->ReleaseProcess(); | 535 RenderProcess::current()->ReleaseProcess(); |
| 535 } | 536 } |
| 536 | 537 |
| 537 // static | 538 // static |
| 538 RenderWidget* RenderWidget::Create(int32 opener_id, | 539 RenderWidget* RenderWidget::Create(int32 opener_id, |
| 539 CompositorDependencies* compositor_deps, | 540 CompositorDependencies* compositor_deps, |
| 540 blink::WebPopupType popup_type, | 541 blink::WebPopupType popup_type, |
| 541 const blink::WebScreenInfo& screen_info) { | 542 const blink::WebScreenInfo& screen_info) { |
| 542 DCHECK(opener_id != MSG_ROUTING_NONE); | 543 DCHECK(opener_id != MSG_ROUTING_NONE); |
| 543 scoped_refptr<RenderWidget> widget( | 544 scoped_refptr<RenderWidget> widget(new RenderWidget( |
| 544 new RenderWidget(popup_type, screen_info, false, false, false)); | 545 compositor_deps, popup_type, screen_info, false, false, false)); |
| 545 if (widget->Init(opener_id, compositor_deps)) { // adds reference on success. | 546 if (widget->Init(opener_id)) { // adds reference on success. |
| 546 return widget.get(); | 547 return widget.get(); |
| 547 } | 548 } |
| 548 return NULL; | 549 return NULL; |
| 549 } | 550 } |
| 550 | 551 |
| 551 // static | 552 // static |
| 552 RenderWidget* RenderWidget::CreateForFrame( | 553 RenderWidget* RenderWidget::CreateForFrame( |
| 553 int routing_id, | 554 int routing_id, |
| 554 int surface_id, | 555 int surface_id, |
| 555 bool hidden, | 556 bool hidden, |
| 556 const blink::WebScreenInfo& screen_info, | 557 const blink::WebScreenInfo& screen_info, |
| 557 CompositorDependencies* compositor_deps, | 558 CompositorDependencies* compositor_deps, |
| 558 blink::WebLocalFrame* frame) { | 559 blink::WebLocalFrame* frame) { |
| 559 CHECK_NE(routing_id, MSG_ROUTING_NONE); | 560 CHECK_NE(routing_id, MSG_ROUTING_NONE); |
| 560 scoped_refptr<RenderWidget> widget(new RenderWidget( | 561 scoped_refptr<RenderWidget> widget( |
| 561 blink::WebPopupTypeNone, screen_info, false, hidden, false)); | 562 new RenderWidget(compositor_deps, blink::WebPopupTypeNone, screen_info, |
| 563 false, hidden, false)); |
| 562 widget->routing_id_ = routing_id; | 564 widget->routing_id_ = routing_id; |
| 563 widget->surface_id_ = surface_id; | 565 widget->surface_id_ = surface_id; |
| 564 widget->compositor_deps_ = compositor_deps; | |
| 565 widget->for_oopif_ = true; | 566 widget->for_oopif_ = true; |
| 566 // DoInit increments the reference count on |widget|, keeping it alive after | 567 // DoInit increments the reference count on |widget|, keeping it alive after |
| 567 // this function returns. | 568 // this function returns. |
| 568 if (widget->DoInit(MSG_ROUTING_NONE, compositor_deps, | 569 if (widget->DoInit(MSG_ROUTING_NONE, |
| 569 RenderWidget::CreateWebFrameWidget(widget.get(), frame), | 570 RenderWidget::CreateWebFrameWidget(widget.get(), frame), |
| 570 nullptr)) { | 571 nullptr)) { |
| 571 widget->CompleteInit(); | 572 widget->CompleteInit(); |
| 572 return widget.get(); | 573 return widget.get(); |
| 573 } | 574 } |
| 574 return nullptr; | 575 return nullptr; |
| 575 } | 576 } |
| 576 | 577 |
| 577 // static | 578 // static |
| 578 blink::WebWidget* RenderWidget::CreateWebFrameWidget( | 579 blink::WebWidget* RenderWidget::CreateWebFrameWidget( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 595 } | 596 } |
| 596 | 597 |
| 597 void RenderWidget::CloseForFrame() { | 598 void RenderWidget::CloseForFrame() { |
| 598 // Close() must be called synchronously, since Blink objects are already in | 599 // Close() must be called synchronously, since Blink objects are already in |
| 599 // the process of being torn down. Deferring Close() to the message loop like | 600 // the process of being torn down. Deferring Close() to the message loop like |
| 600 // the normal case means that Close() will end up getting called when various | 601 // the normal case means that Close() will end up getting called when various |
| 601 // pointers, etc. are already nulled out or freed. | 602 // pointers, etc. are already nulled out or freed. |
| 602 CloseInternal(true); | 603 CloseInternal(true); |
| 603 } | 604 } |
| 604 | 605 |
| 605 bool RenderWidget::Init(int32 opener_id, | 606 bool RenderWidget::Init(int32 opener_id) { |
| 606 CompositorDependencies* compositor_deps) { | 607 return DoInit(opener_id, RenderWidget::CreateWebWidget(this), |
| 607 return DoInit(opener_id, compositor_deps, RenderWidget::CreateWebWidget(this), | |
| 608 new ViewHostMsg_CreateWidget(opener_id, popup_type_, | 608 new ViewHostMsg_CreateWidget(opener_id, popup_type_, |
| 609 &routing_id_, &surface_id_)); | 609 &routing_id_, &surface_id_)); |
| 610 } | 610 } |
| 611 | 611 |
| 612 bool RenderWidget::DoInit(int32 opener_id, | 612 bool RenderWidget::DoInit(int32 opener_id, |
| 613 CompositorDependencies* compositor_deps, | |
| 614 WebWidget* web_widget, | 613 WebWidget* web_widget, |
| 615 IPC::SyncMessage* create_widget_message) { | 614 IPC::SyncMessage* create_widget_message) { |
| 616 DCHECK(!webwidget_); | 615 DCHECK(!webwidget_); |
| 617 | 616 |
| 618 if (opener_id != MSG_ROUTING_NONE) | 617 if (opener_id != MSG_ROUTING_NONE) |
| 619 opener_id_ = opener_id; | 618 opener_id_ = opener_id; |
| 620 | 619 |
| 621 compositor_deps_ = compositor_deps; | |
| 622 webwidget_ = web_widget; | 620 webwidget_ = web_widget; |
| 623 | 621 |
| 624 bool result = true; | 622 bool result = true; |
| 625 if (create_widget_message) | 623 if (create_widget_message) |
| 626 result = RenderThread::Get()->Send(create_widget_message); | 624 result = RenderThread::Get()->Send(create_widget_message); |
| 627 | 625 |
| 628 if (result) { | 626 if (result) { |
| 629 RenderThread::Get()->AddRoute(routing_id_, this); | 627 RenderThread::Get()->AddRoute(routing_id_, this); |
| 630 // Take a reference on behalf of the RenderThread. This will be balanced | 628 // Take a reference on behalf of the RenderThread. This will be balanced |
| 631 // when we receive ViewMsg_Close. | 629 // when we receive ViewMsg_Close. |
| (...skipping 1829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2461 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2459 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2462 video_hole_frames_.AddObserver(frame); | 2460 video_hole_frames_.AddObserver(frame); |
| 2463 } | 2461 } |
| 2464 | 2462 |
| 2465 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2463 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2466 video_hole_frames_.RemoveObserver(frame); | 2464 video_hole_frames_.RemoveObserver(frame); |
| 2467 } | 2465 } |
| 2468 #endif // defined(VIDEO_HOLE) | 2466 #endif // defined(VIDEO_HOLE) |
| 2469 | 2467 |
| 2470 } // namespace content | 2468 } // namespace content |
| OLD | NEW |