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

Side by Side Diff: content/browser/frame_host/render_widget_host_view_guest.cc

Issue 647613002: Fix RenderWidgetHostViewGuest leak. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: bring back mac delegate() 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/bind_helpers.h" 5 #include "base/bind_helpers.h"
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "content/browser/browser_plugin/browser_plugin_guest.h" 9 #include "content/browser/browser_plugin/browser_plugin_guest.h"
10 #include "content/browser/frame_host/render_widget_host_view_guest.h" 10 #include "content/browser/frame_host/render_widget_host_view_guest.h"
(...skipping 28 matching lines...) Expand all
39 gesture_event.sourceDevice = blink::WebGestureDeviceTouchscreen; 39 gesture_event.sourceDevice = blink::WebGestureDeviceTouchscreen;
40 return gesture_event; 40 return gesture_event;
41 } 41 }
42 #endif // defined(USE_AURA) 42 #endif // defined(USE_AURA)
43 43
44 } // namespace 44 } // namespace
45 45
46 RenderWidgetHostViewGuest::RenderWidgetHostViewGuest( 46 RenderWidgetHostViewGuest::RenderWidgetHostViewGuest(
47 RenderWidgetHost* widget_host, 47 RenderWidgetHost* widget_host,
48 BrowserPluginGuest* guest, 48 BrowserPluginGuest* guest,
49 RenderWidgetHostViewBase* platform_view) 49 base::WeakPtr<RenderWidgetHostViewBase> platform_view)
50 : RenderWidgetHostViewChildFrame(widget_host), 50 : RenderWidgetHostViewChildFrame(widget_host),
51 // |guest| is NULL during test. 51 // |guest| is NULL during test.
52 guest_(guest ? guest->AsWeakPtr() : base::WeakPtr<BrowserPluginGuest>()), 52 guest_(guest ? guest->AsWeakPtr() : base::WeakPtr<BrowserPluginGuest>()),
53 platform_view_(platform_view) { 53 platform_view_(platform_view) {
54 #if defined(USE_AURA) 54 #if defined(USE_AURA)
55 gesture_recognizer_.reset(ui::GestureRecognizer::Create()); 55 gesture_recognizer_.reset(ui::GestureRecognizer::Create());
56 gesture_recognizer_->AddGestureEventHelper(this); 56 gesture_recognizer_->AddGestureEventHelper(this);
57 #endif // defined(USE_AURA) 57 #endif // defined(USE_AURA)
58 } 58 }
59 59
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 platform_view_->RenderProcessGone(status, error_code); 170 platform_view_->RenderProcessGone(status, error_code);
171 // Destroy the guest view instance only, so we don't end up calling 171 // Destroy the guest view instance only, so we don't end up calling
172 // platform_view_->Destroy(). 172 // platform_view_->Destroy().
173 DestroyGuestView(); 173 DestroyGuestView();
174 } 174 }
175 175
176 void RenderWidgetHostViewGuest::Destroy() { 176 void RenderWidgetHostViewGuest::Destroy() {
177 // The RenderWidgetHost's destruction led here, so don't call it. 177 // The RenderWidgetHost's destruction led here, so don't call it.
178 DestroyGuestView(); 178 DestroyGuestView();
179 179
180 platform_view_->Destroy(); 180 if (platform_view_) // The platform view might have been destroyed already.
181 platform_view_->Destroy();
181 } 182 }
182 183
183 gfx::Size RenderWidgetHostViewGuest::GetPhysicalBackingSize() const { 184 gfx::Size RenderWidgetHostViewGuest::GetPhysicalBackingSize() const {
184 return RenderWidgetHostViewBase::GetPhysicalBackingSize(); 185 return RenderWidgetHostViewBase::GetPhysicalBackingSize();
185 } 186 }
186 187
187 base::string16 RenderWidgetHostViewGuest::GetSelectedText() const { 188 base::string16 RenderWidgetHostViewGuest::GetSelectedText() const {
188 return platform_view_->GetSelectedText(); 189 return platform_view_->GetSelectedText();
189 } 190 }
190 191
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 gfx::Rect embedder_bounds; 411 gfx::Rect embedder_bounds;
411 if (rwhv) 412 if (rwhv)
412 embedder_bounds = rwhv->GetViewBounds(); 413 embedder_bounds = rwhv->GetViewBounds();
413 414
414 gfx::Vector2d guest_offset = gfx::Vector2d( 415 gfx::Vector2d guest_offset = gfx::Vector2d(
415 // Horizontal offset of guest from embedder. 416 // Horizontal offset of guest from embedder.
416 guest_bounds.x() - embedder_bounds.x(), 417 guest_bounds.x() - embedder_bounds.x(),
417 // Vertical offset from guest's top to embedder's bottom edge. 418 // Vertical offset from guest's top to embedder's bottom edge.
418 embedder_bounds.bottom() - guest_bounds.y()); 419 embedder_bounds.bottom() - guest_bounds.y());
419 420
420 RenderWidgetHostViewMacDictionaryHelper helper(platform_view_); 421 RenderWidgetHostViewMacDictionaryHelper helper(platform_view_.get());
421 helper.SetTargetView(rwhv); 422 helper.SetTargetView(rwhv);
422 helper.set_offset(guest_offset); 423 helper.set_offset(guest_offset);
423 helper.ShowDefinitionForSelection(); 424 helper.ShowDefinitionForSelection();
424 } 425 }
425 426
426 bool RenderWidgetHostViewGuest::SupportsSpeech() const { 427 bool RenderWidgetHostViewGuest::SupportsSpeech() const {
427 return platform_view_->SupportsSpeech(); 428 return platform_view_->SupportsSpeech();
428 } 429 }
429 430
430 void RenderWidgetHostViewGuest::SpeakSelection() { 431 void RenderWidgetHostViewGuest::SpeakSelection() {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 } 594 }
594 595
595 if (blink::WebInputEvent::isGestureEventType(event->type)) { 596 if (blink::WebInputEvent::isGestureEventType(event->type)) {
596 host_->ForwardGestureEvent( 597 host_->ForwardGestureEvent(
597 *static_cast<const blink::WebGestureEvent*>(event)); 598 *static_cast<const blink::WebGestureEvent*>(event));
598 return; 599 return;
599 } 600 }
600 } 601 }
601 602
602 } // namespace content 603 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698