| 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 "chrome/browser/tab_contents/background_contents.h" | 5 #include "chrome/browser/tab_contents/background_contents.h" |
| 6 | 6 |
| 7 #include "chrome/browser/background/background_contents_service.h" | 7 #include "chrome/browser/background/background_contents_service.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
| 9 #include "chrome/browser/renderer_preferences_util.h" | 9 #include "chrome/browser/renderer_preferences_util.h" |
| 10 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | 10 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 profile_(NULL) { | 54 profile_(NULL) { |
| 55 } | 55 } |
| 56 | 56 |
| 57 BackgroundContents::~BackgroundContents() { | 57 BackgroundContents::~BackgroundContents() { |
| 58 if (!web_contents_.get()) // Will be null for unit tests. | 58 if (!web_contents_.get()) // Will be null for unit tests. |
| 59 return; | 59 return; |
| 60 content::NotificationService::current()->Notify( | 60 content::NotificationService::current()->Notify( |
| 61 chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED, | 61 chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED, |
| 62 content::Source<Profile>(profile_), | 62 content::Source<Profile>(profile_), |
| 63 content::Details<BackgroundContents>(this)); | 63 content::Details<BackgroundContents>(this)); |
| 64 // Manually clear web_contents_ to try to track down http://crbug.com/164617. |
| 65 // Freeing the WebContents can cause the RenderViewHost to be destroyed, so |
| 66 // we need to do this after sending out BACKGROUND_CONTENTS_DELETED to give |
| 67 // things like the TaskManager a chance to clean up their references first. |
| 68 web_contents_.reset(); |
| 64 } | 69 } |
| 65 | 70 |
| 66 const GURL& BackgroundContents::GetURL() const { | 71 const GURL& BackgroundContents::GetURL() const { |
| 67 return web_contents_.get() ? web_contents_->GetURL() : GURL::EmptyGURL(); | 72 return web_contents_.get() ? web_contents_->GetURL() : GURL::EmptyGURL(); |
| 68 } | 73 } |
| 69 | 74 |
| 70 void BackgroundContents::CloseContents(WebContents* source) { | 75 void BackgroundContents::CloseContents(WebContents* source) { |
| 71 content::NotificationService::current()->Notify( | 76 content::NotificationService::current()->Notify( |
| 72 chrome::NOTIFICATION_BACKGROUND_CONTENTS_CLOSED, | 77 chrome::NOTIFICATION_BACKGROUND_CONTENTS_CLOSED, |
| 73 content::Source<Profile>(profile_), | 78 content::Source<Profile>(profile_), |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 case chrome::NOTIFICATION_PROFILE_DESTROYED: | 131 case chrome::NOTIFICATION_PROFILE_DESTROYED: |
| 127 case chrome::NOTIFICATION_APP_TERMINATING: { | 132 case chrome::NOTIFICATION_APP_TERMINATING: { |
| 128 delete this; | 133 delete this; |
| 129 break; | 134 break; |
| 130 } | 135 } |
| 131 default: | 136 default: |
| 132 NOTREACHED() << "Unexpected notification sent."; | 137 NOTREACHED() << "Unexpected notification sent."; |
| 133 break; | 138 break; |
| 134 } | 139 } |
| 135 } | 140 } |
| OLD | NEW |