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

Side by Side Diff: chrome/browser/ui/tab_contents/tab_contents.cc

Issue 10911008: Avoid generating thumbnails while WebContents is destructed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
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 "chrome/browser/ui/tab_contents/tab_contents.h" 5 #include "chrome/browser/ui/tab_contents/tab_contents.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "chrome/browser/autofill/autocomplete_history_manager.h" 9 #include "chrome/browser/autofill/autocomplete_history_manager.h"
10 #include "chrome/browser/autofill/autofill_external_delegate.h" 10 #include "chrome/browser/autofill/autofill_external_delegate.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // happens to be already connected. 200 // happens to be already connected.
201 #if defined(ENABLE_ONE_CLICK_SIGNIN) 201 #if defined(ENABLE_ONE_CLICK_SIGNIN)
202 if (OneClickSigninHelper::CanOffer(contents, "", false)) 202 if (OneClickSigninHelper::CanOffer(contents, "", false))
203 one_click_signin_helper_.reset(new OneClickSigninHelper(contents)); 203 one_click_signin_helper_.reset(new OneClickSigninHelper(contents));
204 #endif 204 #endif
205 } 205 }
206 206
207 TabContents::~TabContents() { 207 TabContents::~TabContents() {
208 in_destructor_ = true; 208 in_destructor_ = true;
209 209
210 // Need to reset |thumbnail_generator_| here before |web_contents_| is
211 // deleted because destructing |web_contents_| can end up causing the
212 // thumbnailer to generate a thumbnail. Since TabContents can be
213 // destructed during shutdown, trying to generate a thumbnail by sending an
214 // IPC message to the GPU process is not safe. Sending
215 // chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED can also cause the thumbnailer
mazda 2012/08/30 17:19:18 I was forgetting that we need to deal with this ca
Avi (use Gerrit) 2012/08/30 18:16:26 Note that NOTIFICATION_TAB_CONTENTS_DESTROYED is g
mazda 2012/08/30 19:39:22 That's a great. Then WebContents::IsBeingDestroyed
216 // to generate a thumbnail, so this must be placed before sending the
217 // notification.
218 thumbnail_generator_.reset();
219
220 content::NotificationService::current()->Notify( 210 content::NotificationService::current()->Notify(
221 chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED, 211 chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED,
222 content::Source<TabContents>(this), 212 content::Source<TabContents>(this),
223 content::NotificationService::NoDetails()); 213 content::NotificationService::NoDetails());
224 214
225 // Need to tear down infobars before the WebContents goes away. 215 // Need to tear down infobars before the WebContents goes away.
226 // TODO(avi): Can we get this handled by the tab helper itself? 216 // TODO(avi): Can we get this handled by the tab helper itself?
227 infobar_tab_helper_.reset(); 217 infobar_tab_helper_.reset();
228 } 218 }
229 219
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 #if defined(ENABLE_SESSION_SERVICE) 266 #if defined(ENABLE_SESSION_SERVICE)
277 SessionService* session = 267 SessionService* session =
278 SessionServiceFactory::GetForProfile(profile()); 268 SessionServiceFactory::GetForProfile(profile());
279 if (session) { 269 if (session) {
280 session->SetTabUserAgentOverride(restore_tab_helper()->window_id(), 270 session->SetTabUserAgentOverride(restore_tab_helper()->window_id(),
281 restore_tab_helper()->session_id(), 271 restore_tab_helper()->session_id(),
282 user_agent); 272 user_agent);
283 } 273 }
284 #endif 274 #endif
285 } 275 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698