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

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

Issue 8515027: Define the public version of the browser side RenderProcessHost interface. This interface is not ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 content::Source<TabContents>(preview_contents))) { 51 content::Source<TabContents>(preview_contents))) {
52 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, 52 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
53 content::Source<TabContents>(preview_contents)); 53 content::Source<TabContents>(preview_contents));
54 } 54 }
55 55
56 // If a tab that is printing crashes, the user cannot destroy it since it is 56 // 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. 57 // not in any tab strip. Thus listen for crashes here and delete the tab.
58 // 58 //
59 // Multiple sites may share the same RenderProcessHost, so check if this 59 // Multiple sites may share the same RenderProcessHost, so check if this
60 // notification has already been added. 60 // notification has already been added.
61 RenderProcessHost* rph = preview_tab->render_view_host()->process(); 61 content::RenderProcessHost* rph = preview_tab->render_view_host()->process();
62 if (!registrar_.IsRegistered(this, 62 if (!registrar_.IsRegistered(this,
63 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 63 content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
64 content::Source<RenderProcessHost>(rph))) { 64 content::Source<content::RenderProcessHost>(
65 rph))) {
65 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 66 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
66 content::Source<RenderProcessHost>(rph)); 67 content::Source<content::RenderProcessHost>(rph));
67 } 68 }
68 69
69 // Activate the initiator tab. 70 // Activate the initiator tab.
70 PrintPreviewTabController* tab_controller = 71 PrintPreviewTabController* tab_controller =
71 PrintPreviewTabController::GetInstance(); 72 PrintPreviewTabController::GetInstance();
72 if (!tab_controller) 73 if (!tab_controller)
73 return; 74 return;
74 TabContentsWrapper* initiator_tab = 75 TabContentsWrapper* initiator_tab =
75 tab_controller->GetInitiatorTab(preview_tab); 76 tab_controller->GetInitiatorTab(preview_tab);
76 if (!initiator_tab) 77 if (!initiator_tab)
77 return; 78 return;
78 static_cast<RenderViewHostDelegate*>( 79 static_cast<RenderViewHostDelegate*>(
79 initiator_tab->tab_contents())->Activate(); 80 initiator_tab->tab_contents())->Activate();
80 } 81 }
81 82
82 void BackgroundPrintingManager::Observe( 83 void BackgroundPrintingManager::Observe(
83 int type, 84 int type,
84 const content::NotificationSource& source, 85 const content::NotificationSource& source,
85 const content::NotificationDetails& details) { 86 const content::NotificationDetails& details) {
86 switch (type) { 87 switch (type) {
87 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { 88 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
88 OnRendererProcessClosed(content::Source<RenderProcessHost>(source).ptr()); 89 OnRendererProcessClosed(
90 content::Source<content::RenderProcessHost>(source).ptr());
89 break; 91 break;
90 } 92 }
91 case chrome::NOTIFICATION_PRINT_JOB_RELEASED: { 93 case chrome::NOTIFICATION_PRINT_JOB_RELEASED: {
92 OnPrintJobReleased(content::Source<TabContentsWrapper>(source).ptr()); 94 OnPrintJobReleased(content::Source<TabContentsWrapper>(source).ptr());
93 break; 95 break;
94 } 96 }
95 case content::NOTIFICATION_TAB_CONTENTS_DESTROYED: { 97 case content::NOTIFICATION_TAB_CONTENTS_DESTROYED: {
96 OnTabContentsDestroyed( 98 OnTabContentsDestroyed(
97 TabContentsWrapper::GetCurrentWrapperForContents( 99 TabContentsWrapper::GetCurrentWrapperForContents(
98 content::Source<TabContents>(source).ptr())); 100 content::Source<TabContents>(source).ptr()));
99 break; 101 break;
100 } 102 }
101 default: { 103 default: {
102 NOTREACHED(); 104 NOTREACHED();
103 break; 105 break;
104 } 106 }
105 } 107 }
106 } 108 }
107 109
108 void BackgroundPrintingManager::OnRendererProcessClosed( 110 void BackgroundPrintingManager::OnRendererProcessClosed(
109 RenderProcessHost* rph) { 111 content::RenderProcessHost* rph) {
110 TabContentsWrapperSet preview_tabs_pending_deletion; 112 TabContentsWrapperSet preview_tabs_pending_deletion;
111 TabContentsWrapperSet::const_iterator it; 113 TabContentsWrapperSet::const_iterator it;
112 for (it = begin(); it != end(); ++it) { 114 for (it = begin(); it != end(); ++it) {
113 TabContentsWrapper* preview_tab = *it; 115 TabContentsWrapper* preview_tab = *it;
114 if (preview_tab->render_view_host()->process() == rph) { 116 if (preview_tab->render_view_host()->process() == rph) {
115 preview_tabs_pending_deletion.insert(preview_tab); 117 preview_tabs_pending_deletion.insert(preview_tab);
116 } 118 }
117 } 119 }
118 for (it = preview_tabs_pending_deletion.begin(); 120 for (it = preview_tabs_pending_deletion.begin();
119 it != preview_tabs_pending_deletion.end(); 121 it != preview_tabs_pending_deletion.end();
(...skipping 16 matching lines...) Expand all
136 if (!HasPrintPreviewTab(preview_tab)) { 138 if (!HasPrintPreviewTab(preview_tab)) {
137 NOTREACHED(); 139 NOTREACHED();
138 return; 140 return;
139 } 141 }
140 142
141 // Remove NOTIFICATION_RENDERER_PROCESS_CLOSED if |preview_tab| is the last 143 // Remove NOTIFICATION_RENDERER_PROCESS_CLOSED if |preview_tab| is the last
142 // TabContents associated with |rph|. 144 // TabContents associated with |rph|.
143 bool shared_rph = HasSharedRenderProcessHost(printing_tabs_, preview_tab) || 145 bool shared_rph = HasSharedRenderProcessHost(printing_tabs_, preview_tab) ||
144 HasSharedRenderProcessHost(printing_tabs_pending_deletion_, preview_tab); 146 HasSharedRenderProcessHost(printing_tabs_pending_deletion_, preview_tab);
145 if (!shared_rph) { 147 if (!shared_rph) {
146 RenderProcessHost* rph = preview_tab->render_view_host()->process(); 148 content::RenderProcessHost* rph =
149 preview_tab->render_view_host()->process();
147 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 150 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
148 content::Source<RenderProcessHost>(rph)); 151 content::Source<content::RenderProcessHost>(rph));
149 } 152 }
150 153
151 // Remove other notifications and remove the tab from its 154 // Remove other notifications and remove the tab from its
152 // TabContentsWrapperSet. 155 // TabContentsWrapperSet.
153 if (printing_tabs_.find(preview_tab) != printing_tabs_.end()) { 156 if (printing_tabs_.find(preview_tab) != printing_tabs_.end()) {
154 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED, 157 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED,
155 content::Source<TabContentsWrapper>(preview_tab)); 158 content::Source<TabContentsWrapper>(preview_tab));
156 printing_tabs_.erase(preview_tab); 159 printing_tabs_.erase(preview_tab);
157 } else { 160 } else {
158 // DeletePreviewTab already deleted the notification. 161 // DeletePreviewTab already deleted the notification.
159 printing_tabs_pending_deletion_.erase(preview_tab); 162 printing_tabs_pending_deletion_.erase(preview_tab);
160 } 163 }
161 } 164 }
162 165
163 void BackgroundPrintingManager::DeletePreviewTab(TabContentsWrapper* tab) { 166 void BackgroundPrintingManager::DeletePreviewTab(TabContentsWrapper* tab) {
164 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED, 167 registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED,
165 content::Source<TabContentsWrapper>(tab)); 168 content::Source<TabContentsWrapper>(tab));
166 printing_tabs_.erase(tab); 169 printing_tabs_.erase(tab);
167 printing_tabs_pending_deletion_.insert(tab); 170 printing_tabs_pending_deletion_.insert(tab);
168 MessageLoop::current()->DeleteSoon(FROM_HERE, tab); 171 MessageLoop::current()->DeleteSoon(FROM_HERE, tab);
169 } 172 }
170 173
171 bool BackgroundPrintingManager::HasSharedRenderProcessHost( 174 bool BackgroundPrintingManager::HasSharedRenderProcessHost(
172 const TabContentsWrapperSet& set, 175 const TabContentsWrapperSet& set,
173 TabContentsWrapper* tab) { 176 TabContentsWrapper* tab) {
174 RenderProcessHost* rph = tab->render_view_host()->process(); 177 content::RenderProcessHost* rph = tab->render_view_host()->process();
175 for (TabContentsWrapperSet::const_iterator it = set.begin(); 178 for (TabContentsWrapperSet::const_iterator it = set.begin();
176 it != set.end(); 179 it != set.end();
177 ++it) { 180 ++it) {
178 TabContentsWrapper* iter_tab = *it; 181 TabContentsWrapper* iter_tab = *it;
179 if ((iter_tab != tab) && 182 if ((iter_tab != tab) &&
180 (iter_tab->render_view_host()->process() == rph)) { 183 (iter_tab->render_view_host()->process() == rph)) {
181 return true; 184 return true;
182 } 185 }
183 } 186 }
184 return false; 187 return false;
(...skipping 11 matching lines...) Expand all
196 199
197 bool BackgroundPrintingManager::HasPrintPreviewTab( 200 bool BackgroundPrintingManager::HasPrintPreviewTab(
198 TabContentsWrapper* preview_tab) { 201 TabContentsWrapper* preview_tab) {
199 if (printing_tabs_.find(preview_tab) != printing_tabs_.end()) 202 if (printing_tabs_.find(preview_tab) != printing_tabs_.end())
200 return true; 203 return true;
201 return printing_tabs_pending_deletion_.find(preview_tab) != 204 return printing_tabs_pending_deletion_.find(preview_tab) !=
202 printing_tabs_pending_deletion_.end(); 205 printing_tabs_pending_deletion_.end();
203 } 206 }
204 207
205 } // namespace printing 208 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/browser/printing/background_printing_manager.h ('k') | chrome/browser/printing/print_preview_tab_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698