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

Side by Side Diff: chrome/browser/printing/background_printing_manager.cc

Issue 8892011: Clean up TCW, make it solely a hub for 1:1 observer/helper objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/printing/background_printing_manager.h" 5 #include "chrome/browser/printing/background_printing_manager.h"
6 6
7 #include "chrome/browser/printing/print_job.h" 7 #include "chrome/browser/printing/print_job.h"
8 #include "chrome/browser/printing/print_preview_tab_controller.h" 8 #include "chrome/browser/printing/print_preview_tab_controller.h"
9 #include "chrome/browser/sessions/restore_tab_helper.h" 9 #include "chrome/browser/sessions/restore_tab_helper.h"
10 #include "chrome/browser/tabs/tab_strip_model.h" 10 #include "chrome/browser/tabs/tab_strip_model.h"
11 #include "chrome/browser/ui/browser_list.h" 11 #include "chrome/browser/ui/browser_list.h"
12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
13 #include "chrome/common/chrome_notification_types.h" 13 #include "chrome/common/chrome_notification_types.h"
14 #include "content/browser/renderer_host/render_view_host.h" 14 #include "content/browser/renderer_host/render_view_host.h"
15 #include "content/browser/tab_contents/tab_contents.h"
15 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/notification_details.h" 17 #include "content/public/browser/notification_details.h"
17 #include "content/public/browser/notification_source.h" 18 #include "content/public/browser/notification_source.h"
18 19
19 using content::BrowserThread; 20 using content::BrowserThread;
20 21
21 namespace printing { 22 namespace printing {
22 23
23 BackgroundPrintingManager::BackgroundPrintingManager() { 24 BackgroundPrintingManager::BackgroundPrintingManager() {
24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 25 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
(...skipping 26 matching lines...) Expand all
51 content::Source<TabContents>(preview_contents))) { 52 content::Source<TabContents>(preview_contents))) {
52 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, 53 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
53 content::Source<TabContents>(preview_contents)); 54 content::Source<TabContents>(preview_contents));
54 } 55 }
55 56
56 // If a tab that is printing crashes, the user cannot destroy it since it is 57 // If a tab that is printing crashes, the user cannot destroy it since it is
57 // not in any tab strip. Thus listen for crashes here and delete the tab. 58 // not in any tab strip. Thus listen for crashes here and delete the tab.
58 // 59 //
59 // Multiple sites may share the same RenderProcessHost, so check if this 60 // Multiple sites may share the same RenderProcessHost, so check if this
60 // notification has already been added. 61 // notification has already been added.
61 content::RenderProcessHost* rph = preview_tab->render_view_host()->process(); 62 content::RenderProcessHost* rph =
63 preview_tab->tab_contents()->render_view_host()->process();
62 if (!registrar_.IsRegistered(this, 64 if (!registrar_.IsRegistered(this,
63 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 65 content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
64 content::Source<content::RenderProcessHost>( 66 content::Source<content::RenderProcessHost>(
65 rph))) { 67 rph))) {
66 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 68 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
67 content::Source<content::RenderProcessHost>(rph)); 69 content::Source<content::RenderProcessHost>(rph));
68 } 70 }
69 71
70 // Activate the initiator tab. 72 // Activate the initiator tab.
71 PrintPreviewTabController* tab_controller = 73 PrintPreviewTabController* tab_controller =
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 } 108 }
107 } 109 }
108 } 110 }
109 111
110 void BackgroundPrintingManager::OnRendererProcessClosed( 112 void BackgroundPrintingManager::OnRendererProcessClosed(
111 content::RenderProcessHost* rph) { 113 content::RenderProcessHost* rph) {
112 TabContentsWrapperSet preview_tabs_pending_deletion; 114 TabContentsWrapperSet preview_tabs_pending_deletion;
113 TabContentsWrapperSet::const_iterator it; 115 TabContentsWrapperSet::const_iterator it;
114 for (it = begin(); it != end(); ++it) { 116 for (it = begin(); it != end(); ++it) {
115 TabContentsWrapper* preview_tab = *it; 117 TabContentsWrapper* preview_tab = *it;
116 if (preview_tab->render_view_host()->process() == rph) { 118 if (preview_tab->tab_contents()->render_view_host()->process() == rph) {
117 preview_tabs_pending_deletion.insert(preview_tab); 119 preview_tabs_pending_deletion.insert(preview_tab);
118 } 120 }
119 } 121 }
120 for (it = preview_tabs_pending_deletion.begin(); 122 for (it = preview_tabs_pending_deletion.begin();
121 it != preview_tabs_pending_deletion.end(); 123 it != preview_tabs_pending_deletion.end();
122 ++it) { 124 ++it) {
123 DeletePreviewTab(*it); 125 DeletePreviewTab(*it);
124 } 126 }
125 } 127 }
126 128
(...skipping 12 matching lines...) Expand all
139 NOTREACHED(); 141 NOTREACHED();
140 return; 142 return;
141 } 143 }
142 144
143 // Remove NOTIFICATION_RENDERER_PROCESS_CLOSED if |preview_tab| is the last 145 // Remove NOTIFICATION_RENDERER_PROCESS_CLOSED if |preview_tab| is the last
144 // TabContents associated with |rph|. 146 // TabContents associated with |rph|.
145 bool shared_rph = HasSharedRenderProcessHost(printing_tabs_, preview_tab) || 147 bool shared_rph = HasSharedRenderProcessHost(printing_tabs_, preview_tab) ||
146 HasSharedRenderProcessHost(printing_tabs_pending_deletion_, preview_tab); 148 HasSharedRenderProcessHost(printing_tabs_pending_deletion_, preview_tab);
147 if (!shared_rph) { 149 if (!shared_rph) {
148 content::RenderProcessHost* rph = 150 content::RenderProcessHost* rph =
149 preview_tab->render_view_host()->process(); 151 preview_tab->tab_contents()->render_view_host()->process();
150 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 152 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
151 content::Source<content::RenderProcessHost>(rph)); 153 content::Source<content::RenderProcessHost>(rph));
152 } 154 }
153 155
154 // Remove other notifications and remove the tab from its 156 // Remove other notifications and remove the tab from its
155 // TabContentsWrapperSet. 157 // TabContentsWrapperSet.
156 if (printing_tabs_.find(preview_tab) != printing_tabs_.end()) { 158 if (printing_tabs_.find(preview_tab) != printing_tabs_.end()) {
157 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED, 159 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED,
158 content::Source<TabContentsWrapper>(preview_tab)); 160 content::Source<TabContentsWrapper>(preview_tab));
159 printing_tabs_.erase(preview_tab); 161 printing_tabs_.erase(preview_tab);
160 } else { 162 } else {
161 // DeletePreviewTab already deleted the notification. 163 // DeletePreviewTab already deleted the notification.
162 printing_tabs_pending_deletion_.erase(preview_tab); 164 printing_tabs_pending_deletion_.erase(preview_tab);
163 } 165 }
164 } 166 }
165 167
166 void BackgroundPrintingManager::DeletePreviewTab(TabContentsWrapper* tab) { 168 void BackgroundPrintingManager::DeletePreviewTab(TabContentsWrapper* tab) {
167 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED, 169 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED,
168 content::Source<TabContentsWrapper>(tab)); 170 content::Source<TabContentsWrapper>(tab));
169 printing_tabs_.erase(tab); 171 printing_tabs_.erase(tab);
170 printing_tabs_pending_deletion_.insert(tab); 172 printing_tabs_pending_deletion_.insert(tab);
171 MessageLoop::current()->DeleteSoon(FROM_HERE, tab); 173 MessageLoop::current()->DeleteSoon(FROM_HERE, tab);
172 } 174 }
173 175
174 bool BackgroundPrintingManager::HasSharedRenderProcessHost( 176 bool BackgroundPrintingManager::HasSharedRenderProcessHost(
175 const TabContentsWrapperSet& set, 177 const TabContentsWrapperSet& set,
176 TabContentsWrapper* tab) { 178 TabContentsWrapper* tab) {
177 content::RenderProcessHost* rph = tab->render_view_host()->process(); 179 content::RenderProcessHost* rph =
180 tab->tab_contents()->render_view_host()->process();
178 for (TabContentsWrapperSet::const_iterator it = set.begin(); 181 for (TabContentsWrapperSet::const_iterator it = set.begin();
179 it != set.end(); 182 it != set.end();
180 ++it) { 183 ++it) {
181 TabContentsWrapper* iter_tab = *it; 184 TabContentsWrapper* iter_tab = *it;
182 if ((iter_tab != tab) && 185 if ((iter_tab != tab) &&
183 (iter_tab->render_view_host()->process() == rph)) { 186 (iter_tab->tab_contents()->render_view_host()->process() == rph)) {
184 return true; 187 return true;
185 } 188 }
186 } 189 }
187 return false; 190 return false;
188 } 191 }
189 192
190 BackgroundPrintingManager::TabContentsWrapperSet::const_iterator 193 BackgroundPrintingManager::TabContentsWrapperSet::const_iterator
191 BackgroundPrintingManager::begin() { 194 BackgroundPrintingManager::begin() {
192 return printing_tabs_.begin(); 195 return printing_tabs_.begin();
193 } 196 }
194 197
195 BackgroundPrintingManager::TabContentsWrapperSet::const_iterator 198 BackgroundPrintingManager::TabContentsWrapperSet::const_iterator
196 BackgroundPrintingManager::end() { 199 BackgroundPrintingManager::end() {
197 return printing_tabs_.end(); 200 return printing_tabs_.end();
198 } 201 }
199 202
200 bool BackgroundPrintingManager::HasPrintPreviewTab( 203 bool BackgroundPrintingManager::HasPrintPreviewTab(
201 TabContentsWrapper* preview_tab) { 204 TabContentsWrapper* preview_tab) {
202 if (printing_tabs_.find(preview_tab) != printing_tabs_.end()) 205 if (printing_tabs_.find(preview_tab) != printing_tabs_.end())
203 return true; 206 return true;
204 return printing_tabs_pending_deletion_.find(preview_tab) != 207 return printing_tabs_pending_deletion_.find(preview_tab) !=
205 printing_tabs_pending_deletion_.end(); 208 printing_tabs_pending_deletion_.end();
206 } 209 }
207 210
208 } // namespace printing 211 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | chrome/browser/printing/print_preview_message_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698