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

Side by Side Diff: content/renderer/render_widget.cc

Issue 616133002: Make RenderFrame(Host) own a RenderWidget(Host). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed output surface problems, combined RenderFrame and RenderWidget creation Created 6 years, 2 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/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/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 DCHECK(opener_id != MSG_ROUTING_NONE); 442 DCHECK(opener_id != MSG_ROUTING_NONE);
443 scoped_refptr<RenderWidget> widget( 443 scoped_refptr<RenderWidget> widget(
444 new RenderWidget(popup_type, screen_info, false, false, false)); 444 new RenderWidget(popup_type, screen_info, false, false, false));
445 if (widget->Init(opener_id)) { // adds reference on success. 445 if (widget->Init(opener_id)) { // adds reference on success.
446 return widget.get(); 446 return widget.get();
447 } 447 }
448 return NULL; 448 return NULL;
449 } 449 }
450 450
451 // static 451 // static
452 RenderWidget* RenderWidget::CreateForFrame(
453 int routing_id,
454 int surface_id,
455 bool hidden,
456 const blink::WebScreenInfo& screen_info) {
457 DCHECK(routing_id != MSG_ROUTING_NONE);
458 scoped_refptr<RenderWidget> widget(
459 new RenderWidget(blink::WebPopupTypeNone,
460 screen_info,
461 false,
462 hidden,
463 false));
464 widget->routing_id_ = routing_id;
465 widget->surface_id_ = surface_id;
466 //TODO(kenrb): Change CreateWebWidget to CreateWebFrameWidget before landing!
467 if (widget->DoInit(MSG_ROUTING_NONE,
468 RenderWidget::CreateWebWidget(widget.get()),
469 nullptr)) {
470 return widget.get();
471 }
472 return NULL;
473 }
474
475 // static
452 WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) { 476 WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) {
453 switch (render_widget->popup_type_) { 477 switch (render_widget->popup_type_) {
454 case blink::WebPopupTypeNone: // Nothing to create. 478 case blink::WebPopupTypeNone: // Nothing to create.
455 break; 479 break;
456 case blink::WebPopupTypeSelect: 480 case blink::WebPopupTypeSelect:
457 case blink::WebPopupTypeSuggestion: 481 case blink::WebPopupTypeSuggestion:
458 return WebPopupMenu::create(render_widget); 482 return WebPopupMenu::create(render_widget);
459 case blink::WebPopupTypePage: 483 case blink::WebPopupTypePage:
460 return WebPagePopup::create(render_widget); 484 return WebPagePopup::create(render_widget);
461 default: 485 default:
(...skipping 12 matching lines...) Expand all
474 bool RenderWidget::DoInit(int32 opener_id, 498 bool RenderWidget::DoInit(int32 opener_id,
475 WebWidget* web_widget, 499 WebWidget* web_widget,
476 IPC::SyncMessage* create_widget_message) { 500 IPC::SyncMessage* create_widget_message) {
477 DCHECK(!webwidget_); 501 DCHECK(!webwidget_);
478 502
479 if (opener_id != MSG_ROUTING_NONE) 503 if (opener_id != MSG_ROUTING_NONE)
480 opener_id_ = opener_id; 504 opener_id_ = opener_id;
481 505
482 webwidget_ = web_widget; 506 webwidget_ = web_widget;
483 507
484 bool result = RenderThread::Get()->Send(create_widget_message); 508 bool result = true;
509 if (create_widget_message)
510 result = RenderThread::Get()->Send(create_widget_message);
511
485 if (result) { 512 if (result) {
486 RenderThread::Get()->AddRoute(routing_id_, this); 513 RenderThread::Get()->AddRoute(routing_id_, this);
487 // Take a reference on behalf of the RenderThread. This will be balanced 514 // Take a reference on behalf of the RenderThread. This will be balanced
488 // when we receive ViewMsg_Close. 515 // when we receive ViewMsg_Close.
489 AddRef(); 516 AddRef();
490 if (RenderThreadImpl::current()) { 517 if (RenderThreadImpl::current()) {
491 RenderThreadImpl::current()->WidgetCreated(); 518 RenderThreadImpl::current()->WidgetCreated();
492 if (is_hidden_) 519 if (is_hidden_)
493 RenderThreadImpl::current()->WidgetHidden(); 520 RenderThreadImpl::current()->WidgetHidden();
494 } 521 }
(...skipping 1700 matching lines...) Expand 10 before | Expand all | Expand 10 after
2195 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { 2222 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) {
2196 video_hole_frames_.AddObserver(frame); 2223 video_hole_frames_.AddObserver(frame);
2197 } 2224 }
2198 2225
2199 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { 2226 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) {
2200 video_hole_frames_.RemoveObserver(frame); 2227 video_hole_frames_.RemoveObserver(frame);
2201 } 2228 }
2202 #endif // defined(VIDEO_HOLE) 2229 #endif // defined(VIDEO_HOLE)
2203 2230
2204 } // namespace content 2231 } // namespace content
OLDNEW
« content/common/frame_messages.h ('K') | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698