| OLD | NEW |
| 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/print_preview_tab_controller.h" | 5 #include "chrome/browser/printing/print_preview_tab_controller.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 PluginService::OverriddenPlugin plugin; | 57 PluginService::OverriddenPlugin plugin; |
| 58 plugin.render_process_id = preview_tab->render_view_host()->process()->id(); | 58 plugin.render_process_id = preview_tab->render_view_host()->process()->id(); |
| 59 plugin.render_view_id = preview_tab->render_view_host()->routing_id(); | 59 plugin.render_view_id = preview_tab->render_view_host()->routing_id(); |
| 60 plugin.plugin = plugins[0]; | 60 plugin.plugin = plugins[0]; |
| 61 plugin.plugin.enabled = WebPluginInfo::USER_ENABLED; | 61 plugin.plugin.enabled = WebPluginInfo::USER_ENABLED; |
| 62 | 62 |
| 63 PluginService::GetInstance()->OverridePluginForTab(plugin); | 63 PluginService::GetInstance()->OverridePluginForTab(plugin); |
| 64 } | 64 } |
| 65 } | 65 } |
| 66 | 66 |
| 67 void ResetPreviewTabOverrideTitle(TabContents* preview_tab) { | 67 void ResetPreviewTabOverrideTitle(TabContentsWrapper* preview_tab) { |
| 68 TabContentsWrapper* wrapper = | 68 preview_tab->print_view_manager()->ResetTitleOverride(); |
| 69 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab); | |
| 70 wrapper->print_view_manager()->ResetTitleOverride(); | |
| 71 } | 69 } |
| 72 | 70 |
| 73 } // namespace | 71 } // namespace |
| 74 | 72 |
| 75 namespace printing { | 73 namespace printing { |
| 76 | 74 |
| 77 PrintPreviewTabController::PrintPreviewTabController() | 75 PrintPreviewTabController::PrintPreviewTabController() |
| 78 : waiting_for_new_preview_page_(false) { | 76 : waiting_for_new_preview_page_(false) { |
| 79 } | 77 } |
| 80 | 78 |
| 81 PrintPreviewTabController::~PrintPreviewTabController() {} | 79 PrintPreviewTabController::~PrintPreviewTabController() {} |
| 82 | 80 |
| 83 // static | 81 // static |
| 84 PrintPreviewTabController* PrintPreviewTabController::GetInstance() { | 82 PrintPreviewTabController* PrintPreviewTabController::GetInstance() { |
| 85 if (!g_browser_process) | 83 if (!g_browser_process) |
| 86 return NULL; | 84 return NULL; |
| 87 return g_browser_process->print_preview_tab_controller(); | 85 return g_browser_process->print_preview_tab_controller(); |
| 88 } | 86 } |
| 89 | 87 |
| 90 // static | 88 // static |
| 91 void PrintPreviewTabController::PrintPreview(TabContents* tab) { | 89 void PrintPreviewTabController::PrintPreview(TabContentsWrapper* tab) { |
| 92 if (tab->showing_interstitial_page()) | 90 if (tab->tab_contents()->showing_interstitial_page()) |
| 93 return; | 91 return; |
| 94 | 92 |
| 95 printing::PrintPreviewTabController* tab_controller = | 93 PrintPreviewTabController* tab_controller = |
| 96 printing::PrintPreviewTabController::GetInstance(); | 94 PrintPreviewTabController::GetInstance(); |
| 97 if (!tab_controller) | 95 if (!tab_controller) |
| 98 return; | 96 return; |
| 99 tab_controller->GetOrCreatePreviewTab(tab); | 97 tab_controller->GetOrCreatePreviewTab(tab); |
| 100 } | 98 } |
| 101 | 99 |
| 102 TabContents* PrintPreviewTabController::GetOrCreatePreviewTab( | 100 TabContentsWrapper* PrintPreviewTabController::GetOrCreatePreviewTab( |
| 103 TabContents* initiator_tab) { | 101 TabContentsWrapper* initiator_tab) { |
| 104 DCHECK(initiator_tab); | 102 DCHECK(initiator_tab); |
| 105 | 103 |
| 106 // Get the print preview tab for |initiator_tab|. | 104 // Get the print preview tab for |initiator_tab|. |
| 107 TabContents* preview_tab = GetPrintPreviewForTab(initiator_tab); | 105 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(initiator_tab); |
| 108 if (preview_tab) { | 106 if (!preview_tab) |
| 109 // Show current preview tab. | 107 return CreatePrintPreviewTab(initiator_tab); |
| 110 static_cast<RenderViewHostDelegate*>(preview_tab)->Activate(); | 108 |
| 111 return preview_tab; | 109 // Show current preview tab. |
| 112 } | 110 static_cast<RenderViewHostDelegate*>(preview_tab->tab_contents())->Activate(); |
| 113 return CreatePrintPreviewTab(initiator_tab); | 111 return preview_tab; |
| 114 } | 112 } |
| 115 | 113 |
| 116 TabContents* PrintPreviewTabController::GetPrintPreviewForTab( | 114 TabContentsWrapper* PrintPreviewTabController::GetPrintPreviewForTab( |
| 117 TabContents* tab) const { | 115 TabContentsWrapper* tab) const { |
| 118 // |preview_tab_map_| is keyed by the preview tab, so if find() succeeds, then | 116 // |preview_tab_map_| is keyed by the preview tab, so if find() succeeds, then |
| 119 // |tab| is the preview tab. | 117 // |tab| is the preview tab. |
| 120 PrintPreviewTabMap::const_iterator it = preview_tab_map_.find(tab); | 118 PrintPreviewTabMap::const_iterator it = preview_tab_map_.find(tab); |
| 121 if (it != preview_tab_map_.end()) | 119 if (it != preview_tab_map_.end()) |
| 122 return tab; | 120 return tab; |
| 123 | 121 |
| 124 for (it = preview_tab_map_.begin(); it != preview_tab_map_.end(); ++it) { | 122 for (it = preview_tab_map_.begin(); it != preview_tab_map_.end(); ++it) { |
| 125 // If |tab| is an initiator tab. | 123 // If |tab| is an initiator tab. |
| 126 if (tab == it->second) { | 124 if (tab == it->second) { |
| 127 // Return the associated preview tab. | 125 // Return the associated preview tab. |
| 128 return it->first; | 126 return it->first; |
| 129 } | 127 } |
| 130 } | 128 } |
| 131 return NULL; | 129 return NULL; |
| 132 } | 130 } |
| 133 | 131 |
| 134 void PrintPreviewTabController::Observe(int type, | 132 void PrintPreviewTabController::Observe(int type, |
| 135 const NotificationSource& source, | 133 const NotificationSource& source, |
| 136 const NotificationDetails& details) { | 134 const NotificationDetails& details) { |
| 137 switch (type) { | 135 switch (type) { |
| 138 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { | 136 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { |
| 139 OnRendererProcessClosed(Source<RenderProcessHost>(source).ptr()); | 137 OnRendererProcessClosed(Source<RenderProcessHost>(source).ptr()); |
| 140 break; | 138 break; |
| 141 } | 139 } |
| 142 case content::NOTIFICATION_TAB_CONTENTS_DESTROYED: { | 140 case content::NOTIFICATION_TAB_CONTENTS_DESTROYED: { |
| 143 OnTabContentsDestroyed(Source<TabContents>(source).ptr()); | 141 TabContents* tab = Source<TabContents>(source).ptr(); |
| 142 TabContentsWrapper* wrapper = |
| 143 TabContentsWrapper::GetCurrentWrapperForContents(tab); |
| 144 OnTabContentsDestroyed(wrapper); |
| 144 break; | 145 break; |
| 145 } | 146 } |
| 146 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: { | 147 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: { |
| 147 NavigationController* controller = | 148 NavigationController* controller = |
| 148 Source<NavigationController>(source).ptr(); | 149 Source<NavigationController>(source).ptr(); |
| 150 TabContentsWrapper* wrapper = |
| 151 TabContentsWrapper::GetCurrentWrapperForContents( |
| 152 controller->tab_contents()); |
| 149 content::LoadCommittedDetails* load_details = | 153 content::LoadCommittedDetails* load_details = |
| 150 Details<content::LoadCommittedDetails>(details).ptr(); | 154 Details<content::LoadCommittedDetails>(details).ptr(); |
| 151 OnNavEntryCommitted(controller->tab_contents(), load_details); | 155 OnNavEntryCommitted(wrapper, load_details); |
| 152 break; | 156 break; |
| 153 } | 157 } |
| 154 default: { | 158 default: { |
| 155 NOTREACHED(); | 159 NOTREACHED(); |
| 156 break; | 160 break; |
| 157 } | 161 } |
| 158 } | 162 } |
| 159 } | 163 } |
| 160 | 164 |
| 161 void PrintPreviewTabController::OnRendererProcessClosed( | 165 void PrintPreviewTabController::OnRendererProcessClosed( |
| 162 RenderProcessHost* rph) { | 166 RenderProcessHost* rph) { |
| 163 for (PrintPreviewTabMap::iterator iter = preview_tab_map_.begin(); | 167 for (PrintPreviewTabMap::iterator iter = preview_tab_map_.begin(); |
| 164 iter != preview_tab_map_.end(); ++iter) { | 168 iter != preview_tab_map_.end(); ++iter) { |
| 165 if (iter->second != NULL && | 169 if (iter->second != NULL && |
| 166 iter->second->render_view_host()->process() == rph) { | 170 iter->second->render_view_host()->process() == rph) { |
| 167 TabContents* preview_tab = GetPrintPreviewForTab(iter->second); | 171 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(iter->second); |
| 168 PrintPreviewUI* print_preview_ui = | 172 PrintPreviewUI* print_preview_ui = |
| 169 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); | 173 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); |
| 170 print_preview_ui->OnInitiatorTabCrashed(); | 174 print_preview_ui->OnInitiatorTabCrashed(); |
| 171 } | 175 } |
| 172 } | 176 } |
| 173 } | 177 } |
| 174 | 178 |
| 175 void PrintPreviewTabController::OnTabContentsDestroyed(TabContents* tab) { | 179 void PrintPreviewTabController::OnTabContentsDestroyed( |
| 176 TabContents* preview_tab = GetPrintPreviewForTab(tab); | 180 TabContentsWrapper* tab) { |
| 181 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(tab); |
| 177 if (!preview_tab) | 182 if (!preview_tab) |
| 178 return; | 183 return; |
| 179 | 184 |
| 180 if (tab == preview_tab) { | 185 if (tab == preview_tab) { |
| 181 // Remove the initiator tab's observers before erasing the mapping. | 186 // Remove the initiator tab's observers before erasing the mapping. |
| 182 TabContents* initiator_tab = GetInitiatorTab(tab); | 187 TabContentsWrapper* initiator_tab = GetInitiatorTab(tab); |
| 183 if (initiator_tab) | 188 if (initiator_tab) |
| 184 RemoveObservers(initiator_tab); | 189 RemoveObservers(initiator_tab); |
| 185 | 190 |
| 186 // Print preview tab contents are destroyed. Notify |PrintPreviewUI| to | 191 // Print preview tab contents are destroyed. Notify |PrintPreviewUI| to |
| 187 // abort the initiator tab preview request. | 192 // abort the initiator tab preview request. |
| 188 if (IsPrintPreviewTab(tab) && tab->web_ui()) { | 193 if (IsPrintPreviewTab(tab) && tab->web_ui()) { |
| 189 PrintPreviewUI* print_preview_ui = | 194 PrintPreviewUI* print_preview_ui = |
| 190 static_cast<PrintPreviewUI*>(tab->web_ui()); | 195 static_cast<PrintPreviewUI*>(tab->web_ui()); |
| 191 print_preview_ui->OnTabDestroyed(); | 196 print_preview_ui->OnTabDestroyed(); |
| 192 } | 197 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 203 | 208 |
| 204 // |tab| is an initiator tab, update the map entry and remove observers. | 209 // |tab| is an initiator tab, update the map entry and remove observers. |
| 205 preview_tab_map_[preview_tab] = NULL; | 210 preview_tab_map_[preview_tab] = NULL; |
| 206 } | 211 } |
| 207 | 212 |
| 208 ResetPreviewTabOverrideTitle(preview_tab); | 213 ResetPreviewTabOverrideTitle(preview_tab); |
| 209 RemoveObservers(tab); | 214 RemoveObservers(tab); |
| 210 } | 215 } |
| 211 | 216 |
| 212 void PrintPreviewTabController::OnNavEntryCommitted( | 217 void PrintPreviewTabController::OnNavEntryCommitted( |
| 213 TabContents* tab, content::LoadCommittedDetails* details) { | 218 TabContentsWrapper* tab, content::LoadCommittedDetails* details) { |
| 214 TabContents* preview_tab = GetPrintPreviewForTab(tab); | 219 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(tab); |
| 215 bool source_tab_is_preview_tab = (tab == preview_tab); | 220 bool source_tab_is_preview_tab = (tab == preview_tab); |
| 216 if (details) { | 221 if (details) { |
| 217 PageTransition::Type transition_type = details->entry->transition_type(); | 222 PageTransition::Type transition_type = details->entry->transition_type(); |
| 218 NavigationType::Type nav_type = details->type; | 223 NavigationType::Type nav_type = details->type; |
| 219 | 224 |
| 220 // Don't update/erase the map entry if the page has not changed. | 225 // Don't update/erase the map entry if the page has not changed. |
| 221 if (transition_type == PageTransition::RELOAD || | 226 if (transition_type == PageTransition::RELOAD || |
| 222 nav_type == NavigationType::SAME_PAGE) { | 227 nav_type == NavigationType::SAME_PAGE) { |
| 223 if (source_tab_is_preview_tab) | 228 if (source_tab_is_preview_tab) |
| 224 SetInitiatorTabURLAndTitle(preview_tab); | 229 SetInitiatorTabURLAndTitle(preview_tab); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 240 transition_type == PageTransition::FORWARD_BACK && | 245 transition_type == PageTransition::FORWARD_BACK && |
| 241 nav_type == NavigationType::EXISTING_PAGE) { | 246 nav_type == NavigationType::EXISTING_PAGE) { |
| 242 return; | 247 return; |
| 243 } | 248 } |
| 244 } | 249 } |
| 245 | 250 |
| 246 RemoveObservers(tab); | 251 RemoveObservers(tab); |
| 247 ResetPreviewTabOverrideTitle(preview_tab); | 252 ResetPreviewTabOverrideTitle(preview_tab); |
| 248 if (source_tab_is_preview_tab) { | 253 if (source_tab_is_preview_tab) { |
| 249 // Remove the initiator tab's observers before erasing the mapping. | 254 // Remove the initiator tab's observers before erasing the mapping. |
| 250 TabContents* initiator_tab = GetInitiatorTab(tab); | 255 TabContentsWrapper* initiator_tab = GetInitiatorTab(tab); |
| 251 if (initiator_tab) | 256 if (initiator_tab) |
| 252 RemoveObservers(initiator_tab); | 257 RemoveObservers(initiator_tab); |
| 253 preview_tab_map_.erase(tab); | 258 preview_tab_map_.erase(tab); |
| 254 } else { | 259 } else { |
| 255 preview_tab_map_[preview_tab] = NULL; | 260 preview_tab_map_[preview_tab] = NULL; |
| 256 | 261 |
| 257 // Initiator tab is closed. Disable the controls in preview tab. | 262 // Initiator tab is closed. Disable the controls in preview tab. |
| 258 if (preview_tab->web_ui()) { | 263 if (preview_tab->web_ui()) { |
| 259 PrintPreviewUI* print_preview_ui = | 264 PrintPreviewUI* print_preview_ui = |
| 260 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); | 265 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); |
| 261 print_preview_ui->OnInitiatorTabClosed(); | 266 print_preview_ui->OnInitiatorTabClosed(); |
| 262 } | 267 } |
| 263 } | 268 } |
| 264 } | 269 } |
| 265 | 270 |
| 266 // static | 271 // static |
| 267 bool PrintPreviewTabController::IsPrintPreviewTab(TabContents* tab) { | 272 bool PrintPreviewTabController::IsPrintPreviewTab(TabContentsWrapper* tab) { |
| 268 const GURL& url = tab->GetURL(); | 273 const GURL& url = tab->tab_contents()->GetURL(); |
| 269 return (url.SchemeIs(chrome::kChromeUIScheme) && | 274 return (url.SchemeIs(chrome::kChromeUIScheme) && |
| 270 url.host() == chrome::kChromeUIPrintHost); | 275 url.host() == chrome::kChromeUIPrintHost); |
| 271 } | 276 } |
| 272 | 277 |
| 273 void PrintPreviewTabController::EraseInitiatorTabInfo( | 278 void PrintPreviewTabController::EraseInitiatorTabInfo( |
| 274 TabContents* preview_tab) { | 279 TabContentsWrapper* preview_tab) { |
| 275 PrintPreviewTabMap::iterator it = preview_tab_map_.find(preview_tab); | 280 PrintPreviewTabMap::iterator it = preview_tab_map_.find(preview_tab); |
| 276 if (it == preview_tab_map_.end()) | 281 if (it == preview_tab_map_.end()) |
| 277 return; | 282 return; |
| 278 | 283 |
| 279 RemoveObservers(it->second); | 284 RemoveObservers(it->second); |
| 280 preview_tab_map_[preview_tab] = NULL; | 285 preview_tab_map_[preview_tab] = NULL; |
| 281 ResetPreviewTabOverrideTitle(preview_tab); | 286 ResetPreviewTabOverrideTitle(preview_tab); |
| 282 } | 287 } |
| 283 | 288 |
| 284 TabContents* PrintPreviewTabController::GetInitiatorTab( | 289 TabContentsWrapper* PrintPreviewTabController::GetInitiatorTab( |
| 285 TabContents* preview_tab) { | 290 TabContentsWrapper* preview_tab) { |
| 286 PrintPreviewTabMap::iterator it = preview_tab_map_.find(preview_tab); | 291 PrintPreviewTabMap::iterator it = preview_tab_map_.find(preview_tab); |
| 287 if (it != preview_tab_map_.end()) | 292 if (it != preview_tab_map_.end()) |
| 288 return preview_tab_map_[preview_tab]; | 293 return preview_tab_map_[preview_tab]; |
| 289 return NULL; | 294 return NULL; |
| 290 } | 295 } |
| 291 | 296 |
| 292 TabContents* PrintPreviewTabController::CreatePrintPreviewTab( | 297 TabContentsWrapper* PrintPreviewTabController::CreatePrintPreviewTab( |
| 293 TabContents* initiator_tab) { | 298 TabContentsWrapper* initiator_tab) { |
| 294 // TODO: this should be converted to TabContentsWrapper. | |
| 295 TabContentsWrapper* tab = | |
| 296 TabContentsWrapper::GetCurrentWrapperForContents(initiator_tab); | |
| 297 DCHECK(tab); | |
| 298 Browser* current_browser = BrowserList::FindBrowserWithID( | 299 Browser* current_browser = BrowserList::FindBrowserWithID( |
| 299 tab->restore_tab_helper()->window_id().id()); | 300 initiator_tab->restore_tab_helper()->window_id().id()); |
| 300 if (!current_browser) { | 301 if (!current_browser) { |
| 301 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame)) { | 302 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame)) { |
| 302 Profile* profile = | 303 Profile* profile = Profile::FromBrowserContext( |
| 303 Profile::FromBrowserContext(initiator_tab->browser_context()); | 304 initiator_tab->tab_contents()->browser_context()); |
| 304 current_browser = Browser::CreateForType(Browser::TYPE_POPUP, profile); | 305 current_browser = Browser::CreateForType(Browser::TYPE_POPUP, profile); |
| 305 if (!current_browser) { | 306 if (!current_browser) { |
| 306 NOTREACHED() << "Failed to create popup browser window"; | 307 NOTREACHED() << "Failed to create popup browser window"; |
| 307 return NULL; | 308 return NULL; |
| 308 } | 309 } |
| 309 } else { | 310 } else { |
| 310 return NULL; | 311 return NULL; |
| 311 } | 312 } |
| 312 } | 313 } |
| 313 | 314 |
| 314 // Add a new tab next to initiator tab. | 315 // Add a new tab next to initiator tab. |
| 315 browser::NavigateParams params(current_browser, | 316 browser::NavigateParams params(current_browser, |
| 316 GURL(chrome::kChromeUIPrintURL), | 317 GURL(chrome::kChromeUIPrintURL), |
| 317 PageTransition::LINK); | 318 PageTransition::LINK); |
| 318 params.disposition = NEW_FOREGROUND_TAB; | 319 params.disposition = NEW_FOREGROUND_TAB; |
| 319 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame)) | 320 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame)) |
| 320 params.disposition = NEW_POPUP; | 321 params.disposition = NEW_POPUP; |
| 321 params.tabstrip_index = current_browser->tabstrip_model()-> | 322 params.tabstrip_index = current_browser->tabstrip_model()-> |
| 322 GetWrapperIndex(initiator_tab) + 1; | 323 GetIndexOfTabContents(initiator_tab) + 1; |
| 323 browser::Navigate(¶ms); | 324 browser::Navigate(¶ms); |
| 324 TabContentsWrapper* preview_tab = params.target_contents; | 325 TabContentsWrapper* preview_tab = params.target_contents; |
| 325 EnableInternalPDFPluginForTab(preview_tab); | 326 EnableInternalPDFPluginForTab(preview_tab); |
| 326 static_cast<RenderViewHostDelegate*>(preview_tab->tab_contents())->Activate(); | 327 static_cast<RenderViewHostDelegate*>(preview_tab->tab_contents())->Activate(); |
| 327 | 328 |
| 328 // Add an entry to the map. | 329 // Add an entry to the map. |
| 329 preview_tab_map_[preview_tab->tab_contents()] = initiator_tab; | 330 preview_tab_map_[preview_tab] = initiator_tab; |
| 330 waiting_for_new_preview_page_ = true; | 331 waiting_for_new_preview_page_ = true; |
| 331 | 332 |
| 332 AddObservers(initiator_tab); | 333 AddObservers(initiator_tab); |
| 333 AddObservers(preview_tab->tab_contents()); | 334 AddObservers(preview_tab); |
| 334 | 335 |
| 335 return preview_tab->tab_contents(); | 336 return preview_tab; |
| 336 } | 337 } |
| 337 | 338 |
| 338 void PrintPreviewTabController::SetInitiatorTabURLAndTitle( | 339 void PrintPreviewTabController::SetInitiatorTabURLAndTitle( |
| 339 TabContents* preview_tab) { | 340 TabContentsWrapper* preview_tab) { |
| 340 TabContents* initiator_tab = GetInitiatorTab(preview_tab); | 341 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab); |
| 341 if (initiator_tab && preview_tab->web_ui()) { | 342 if (initiator_tab && preview_tab->web_ui()) { |
| 342 PrintPreviewUI* print_preview_ui = | 343 PrintPreviewUI* print_preview_ui = |
| 343 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); | 344 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); |
| 344 TabContentsWrapper* wrapper = | |
| 345 TabContentsWrapper::GetCurrentWrapperForContents(initiator_tab); | |
| 346 print_preview_ui->SetInitiatorTabURLAndTitle( | 345 print_preview_ui->SetInitiatorTabURLAndTitle( |
| 347 initiator_tab->GetURL().spec(), | 346 initiator_tab->tab_contents()->GetURL().spec(), |
| 348 wrapper->print_view_manager()->RenderSourceName()); | 347 initiator_tab->print_view_manager()->RenderSourceName()); |
| 349 } | 348 } |
| 350 } | 349 } |
| 351 | 350 |
| 352 void PrintPreviewTabController::AddObservers(TabContents* tab) { | 351 void PrintPreviewTabController::AddObservers(TabContentsWrapper* tab) { |
| 352 TabContents* contents = tab->tab_contents(); |
| 353 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, | 353 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, |
| 354 Source<TabContents>(tab)); | 354 Source<TabContents>(contents)); |
| 355 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 355 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 356 Source<NavigationController>(&tab->controller())); | 356 Source<NavigationController>(&contents->controller())); |
| 357 | 357 |
| 358 // Multiple sites may share the same RenderProcessHost, so check if this | 358 // Multiple sites may share the same RenderProcessHost, so check if this |
| 359 // notification has already been added. | 359 // notification has already been added. |
| 360 RenderProcessHost* rph = tab->render_view_host()->process(); | 360 RenderProcessHost* rph = tab->render_view_host()->process(); |
| 361 if (!registrar_.IsRegistered(this, | 361 if (!registrar_.IsRegistered(this, |
| 362 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 362 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 363 Source<RenderProcessHost>(rph))) { | 363 Source<RenderProcessHost>(rph))) { |
| 364 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 364 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 365 Source<RenderProcessHost>(rph)); | 365 Source<RenderProcessHost>(rph)); |
| 366 } | 366 } |
| 367 } | 367 } |
| 368 | 368 |
| 369 void PrintPreviewTabController::RemoveObservers(TabContents* tab) { | 369 void PrintPreviewTabController::RemoveObservers(TabContentsWrapper* tab) { |
| 370 TabContents* contents = tab->tab_contents(); |
| 370 registrar_.Remove(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, | 371 registrar_.Remove(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, |
| 371 Source<TabContents>(tab)); | 372 Source<TabContents>(contents)); |
| 372 registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 373 registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 373 Source<NavigationController>(&tab->controller())); | 374 Source<NavigationController>(&contents->controller())); |
| 374 | 375 |
| 375 // Multiple sites may share the same RenderProcessHost, so check if this | 376 // Multiple sites may share the same RenderProcessHost, so check if this |
| 376 // notification has already been added. | 377 // notification has already been added. |
| 377 RenderProcessHost* rph = tab->render_view_host()->process(); | 378 RenderProcessHost* rph = tab->render_view_host()->process(); |
| 378 if (registrar_.IsRegistered(this, | 379 if (registrar_.IsRegistered(this, |
| 379 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 380 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 380 Source<RenderProcessHost>(rph))) { | 381 Source<RenderProcessHost>(rph))) { |
| 381 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 382 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 382 Source<RenderProcessHost>(rph)); | 383 Source<RenderProcessHost>(rph)); |
| 383 } | 384 } |
| 384 } | 385 } |
| 385 | 386 |
| 386 } // namespace printing | 387 } // namespace printing |
| OLD | NEW |