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

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 257153003: We have a problem in the process on destroying WebContentsImpl because (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: Removed what was added in https://codereview.chromium.org/239393009 Created 6 years, 7 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/browser/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
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 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 // WebContentsImpl::DestructionObserver ---------------------------------------- 282 // WebContentsImpl::DestructionObserver ----------------------------------------
283 283
284 class WebContentsImpl::DestructionObserver : public WebContentsObserver { 284 class WebContentsImpl::DestructionObserver : public WebContentsObserver {
285 public: 285 public:
286 DestructionObserver(WebContentsImpl* owner, WebContents* watched_contents) 286 DestructionObserver(WebContentsImpl* owner, WebContents* watched_contents)
287 : WebContentsObserver(watched_contents), 287 : WebContentsObserver(watched_contents),
288 owner_(owner) { 288 owner_(owner) {
289 } 289 }
290 290
291 // WebContentsObserver: 291 // WebContentsObserver:
292 virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE { 292 virtual void WebContentsDestroyed() OVERRIDE {
293 owner_->OnWebContentsDestroyed(static_cast<WebContentsImpl*>(web_contents)); 293 owner_->OnWebContentsDestroyed(
294 static_cast<WebContentsImpl*>(web_contents()));
294 } 295 }
295 296
296 private: 297 private:
297 WebContentsImpl* owner_; 298 WebContentsImpl* owner_;
298 299
299 DISALLOW_COPY_AND_ASSIGN(DestructionObserver); 300 DISALLOW_COPY_AND_ASSIGN(DestructionObserver);
300 }; 301 };
301 302
302 WebContentsImpl::ColorChooserInfo::ColorChooserInfo(int render_process_id, 303 WebContentsImpl::ColorChooserInfo::ColorChooserInfo(int render_process_id,
303 int render_frame_id, 304 int render_frame_id,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) 357 for (size_t i = 0; i < g_created_callbacks.Get().size(); i++)
357 g_created_callbacks.Get().at(i).Run(this); 358 g_created_callbacks.Get().at(i).Run(this);
358 frame_tree_.SetFrameRemoveListener( 359 frame_tree_.SetFrameRemoveListener(
359 base::Bind(&WebContentsImpl::OnFrameRemoved, 360 base::Bind(&WebContentsImpl::OnFrameRemoved,
360 base::Unretained(this))); 361 base::Unretained(this)));
361 } 362 }
362 363
363 WebContentsImpl::~WebContentsImpl() { 364 WebContentsImpl::~WebContentsImpl() {
364 is_being_destroyed_ = true; 365 is_being_destroyed_ = true;
365 366
366 // If there is an interstitial page being shown, tell it to close down early
367 // so that this contents will be alive enough to handle all the UI triggered
368 // by that. <http://crbug.com/363564>
369 InterstitialPageImpl* interstitial_page =
370 static_cast<InterstitialPageImpl*>(GetInterstitialPage());
371 if (interstitial_page)
372 interstitial_page->WebContentsWillBeDestroyed();
373
374 // Delete all RFH pending shutdown, which will lead the corresponding RVH to 367 // Delete all RFH pending shutdown, which will lead the corresponding RVH to
375 // shutdown and be deleted as well. 368 // shutdown and be deleted as well.
376 frame_tree_.ForEach( 369 frame_tree_.ForEach(
377 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); 370 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown));
378 371
379 ClearAllPowerSaveBlockers(); 372 ClearAllPowerSaveBlockers();
380 373
381 for (std::set<RenderWidgetHostImpl*>::iterator iter = 374 for (std::set<RenderWidgetHostImpl*>::iterator iter =
382 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { 375 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) {
383 (*iter)->DetachDelegate(); 376 (*iter)->DetachDelegate();
(...skipping 28 matching lines...) Expand all
412 } 405 }
413 406
414 ForEachFrame(run_render_frame_deleted_callback); 407 ForEachFrame(run_render_frame_deleted_callback);
415 408
416 FOR_EACH_OBSERVER(WebContentsObserver, 409 FOR_EACH_OBSERVER(WebContentsObserver,
417 observers_, 410 observers_,
418 RenderViewDeleted(GetRenderManager()->current_host())); 411 RenderViewDeleted(GetRenderManager()->current_host()));
419 412
420 FOR_EACH_OBSERVER(WebContentsObserver, 413 FOR_EACH_OBSERVER(WebContentsObserver,
421 observers_, 414 observers_,
422 WebContentsImplDestroyed()); 415 WebContentsDestroyed());
416
417 FOR_EACH_OBSERVER(WebContentsObserver,
418 observers_,
419 reset_web_contents());
423 420
424 SetDelegate(NULL); 421 SetDelegate(NULL);
425 422
426 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), 423 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(),
427 destruction_observers_.end()); 424 destruction_observers_.end());
428 } 425 }
429 426
430 WebContentsImpl* WebContentsImpl::CreateWithOpener( 427 WebContentsImpl* WebContentsImpl::CreateWithOpener(
431 const WebContents::CreateParams& params, 428 const WebContents::CreateParams& params,
432 WebContentsImpl* opener) { 429 WebContentsImpl* opener) {
(...skipping 3554 matching lines...) Expand 10 before | Expand all | Expand 10 after
3987 3984
3988 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { 3985 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) {
3989 if (!delegate_) 3986 if (!delegate_)
3990 return; 3987 return;
3991 const gfx::Size new_size = GetPreferredSize(); 3988 const gfx::Size new_size = GetPreferredSize();
3992 if (new_size != old_size) 3989 if (new_size != old_size)
3993 delegate_->UpdatePreferredSize(this, new_size); 3990 delegate_->UpdatePreferredSize(this, new_size);
3994 } 3991 }
3995 3992
3996 } // namespace content 3993 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698