| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 | 245 |
| 246 for (size_t i = 0; i < closed_preview_tabs.size(); ++i) { | 246 for (size_t i = 0; i < closed_preview_tabs.size(); ++i) { |
| 247 RemovePreviewTab(closed_preview_tabs[i]); | 247 RemovePreviewTab(closed_preview_tabs[i]); |
| 248 PrintPreviewUI* print_preview_ui = | 248 PrintPreviewUI* print_preview_ui = |
| 249 static_cast<PrintPreviewUI*>(closed_preview_tabs[i]->web_ui()); | 249 static_cast<PrintPreviewUI*>(closed_preview_tabs[i]->web_ui()); |
| 250 if (print_preview_ui) | 250 if (print_preview_ui) |
| 251 print_preview_ui->OnPrintPreviewTabClosed(); | 251 print_preview_ui->OnPrintPreviewTabClosed(); |
| 252 } | 252 } |
| 253 | 253 |
| 254 for (size_t i = 0; i < closed_initiator_tabs.size(); ++i) | 254 for (size_t i = 0; i < closed_initiator_tabs.size(); ++i) |
| 255 RemoveInitiatorTab(closed_initiator_tabs[i]); | 255 RemoveInitiatorTab(closed_initiator_tabs[i], false); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void PrintPreviewTabController::OnTabContentsDestroyed( | 258 void PrintPreviewTabController::OnTabContentsDestroyed( |
| 259 TabContentsWrapper* tab) { | 259 TabContentsWrapper* tab) { |
| 260 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(tab); | 260 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(tab); |
| 261 if (!preview_tab) { | 261 if (!preview_tab) { |
| 262 NOTREACHED(); | 262 NOTREACHED(); |
| 263 return; | 263 return; |
| 264 } | 264 } |
| 265 | 265 |
| 266 if (tab == preview_tab) | 266 if (tab == preview_tab) |
| 267 RemovePreviewTab(tab); | 267 RemovePreviewTab(tab); |
| 268 else | 268 else |
| 269 RemoveInitiatorTab(tab); | 269 RemoveInitiatorTab(tab, false); |
| 270 } | 270 } |
| 271 | 271 |
| 272 void PrintPreviewTabController::OnNavEntryCommitted( | 272 void PrintPreviewTabController::OnNavEntryCommitted( |
| 273 TabContentsWrapper* tab, content::LoadCommittedDetails* details) { | 273 TabContentsWrapper* tab, content::LoadCommittedDetails* details) { |
| 274 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(tab); | 274 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(tab); |
| 275 if (!preview_tab) { | 275 if (!preview_tab) { |
| 276 NOTREACHED(); | 276 NOTREACHED(); |
| 277 return; | 277 return; |
| 278 } | 278 } |
| 279 bool source_tab_is_preview_tab = (tab == preview_tab); | 279 bool source_tab_is_preview_tab = (tab == preview_tab); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 303 nav_type == content::NAVIGATION_TYPE_EXISTING_PAGE && | 303 nav_type == content::NAVIGATION_TYPE_EXISTING_PAGE && |
| 304 IsPrintPreviewURL(details->previous_url)) { | 304 IsPrintPreviewURL(details->previous_url)) { |
| 305 return; | 305 return; |
| 306 } | 306 } |
| 307 } | 307 } |
| 308 NOTREACHED(); | 308 NOTREACHED(); |
| 309 return; | 309 return; |
| 310 } | 310 } |
| 311 | 311 |
| 312 // Initiator tab navigated. | 312 // Initiator tab navigated. |
| 313 RemoveInitiatorTab(tab); | 313 RemoveInitiatorTab(tab, true); |
| 314 } | 314 } |
| 315 | 315 |
| 316 // static | 316 // static |
| 317 bool PrintPreviewTabController::IsPrintPreviewTab(TabContentsWrapper* tab) { | 317 bool PrintPreviewTabController::IsPrintPreviewTab(TabContentsWrapper* tab) { |
| 318 return IsPrintPreviewURL(tab->tab_contents()->GetURL()); | 318 return IsPrintPreviewURL(tab->tab_contents()->GetURL()); |
| 319 } | 319 } |
| 320 | 320 |
| 321 // static | 321 // static |
| 322 bool PrintPreviewTabController::IsPrintPreviewURL(const GURL& url) { | 322 bool PrintPreviewTabController::IsPrintPreviewURL(const GURL& url) { |
| 323 return (url.SchemeIs(chrome::kChromeUIScheme) && | 323 return (url.SchemeIs(chrome::kChromeUIScheme) && |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 if (registrar_.IsRegistered(this, | 429 if (registrar_.IsRegistered(this, |
| 430 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 430 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 431 content::Source<content::RenderProcessHost>( | 431 content::Source<content::RenderProcessHost>( |
| 432 rph))) { | 432 rph))) { |
| 433 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 433 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 434 content::Source<content::RenderProcessHost>(rph)); | 434 content::Source<content::RenderProcessHost>(rph)); |
| 435 } | 435 } |
| 436 } | 436 } |
| 437 | 437 |
| 438 void PrintPreviewTabController::RemoveInitiatorTab( | 438 void PrintPreviewTabController::RemoveInitiatorTab( |
| 439 TabContentsWrapper* initiator_tab) { | 439 TabContentsWrapper* initiator_tab, bool is_navigation) { |
| 440 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(initiator_tab); | 440 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(initiator_tab); |
| 441 DCHECK(preview_tab); | 441 DCHECK(preview_tab); |
| 442 // Update the map entry first, so when the print preview tab gets destroyed | 442 // Update the map entry first, so when the print preview tab gets destroyed |
| 443 // and reaches RemovePreviewTab(), it does not attempt to also remove the | 443 // and reaches RemovePreviewTab(), it does not attempt to also remove the |
| 444 // initiator tab's observers. | 444 // initiator tab's observers. |
| 445 preview_tab_map_[preview_tab] = NULL; | 445 preview_tab_map_[preview_tab] = NULL; |
| 446 RemoveObservers(initiator_tab); | 446 RemoveObservers(initiator_tab); |
| 447 | 447 |
| 448 // For the navigation case, PrintPreviewDone() has already been called in |
| 449 // PrintPreviewMessageHandler::NavigateToPendingEntry(). |
| 450 if (!is_navigation) |
| 451 initiator_tab->print_view_manager()->PrintPreviewDone(); |
| 452 |
| 448 // Initiator tab is closed. Close the print preview tab too. | 453 // Initiator tab is closed. Close the print preview tab too. |
| 449 PrintPreviewUI* print_preview_ui = | 454 PrintPreviewUI* print_preview_ui = |
| 450 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); | 455 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); |
| 451 if (print_preview_ui) | 456 if (print_preview_ui) |
| 452 print_preview_ui->OnInitiatorTabClosed(); | 457 print_preview_ui->OnInitiatorTabClosed(); |
| 453 } | 458 } |
| 454 | 459 |
| 455 void PrintPreviewTabController::RemovePreviewTab( | 460 void PrintPreviewTabController::RemovePreviewTab( |
| 456 TabContentsWrapper* preview_tab) { | 461 TabContentsWrapper* preview_tab) { |
| 457 // Remove the initiator tab's observers before erasing the mapping. | 462 // Remove the initiator tab's observers before erasing the mapping. |
| 458 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab); | 463 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab); |
| 459 if (initiator_tab) | 464 if (initiator_tab) { |
| 460 RemoveObservers(initiator_tab); | 465 RemoveObservers(initiator_tab); |
| 466 initiator_tab->print_view_manager()->PrintPreviewDone(); |
| 467 } |
| 461 | 468 |
| 462 // Print preview TabContents is destroyed. Notify |PrintPreviewUI| to abort | 469 // Print preview TabContents is destroyed. Notify |PrintPreviewUI| to abort |
| 463 // the initiator tab preview request. | 470 // the initiator tab preview request. |
| 464 PrintPreviewUI* print_preview_ui = | 471 PrintPreviewUI* print_preview_ui = |
| 465 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); | 472 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); |
| 466 if (print_preview_ui) | 473 if (print_preview_ui) |
| 467 print_preview_ui->OnTabDestroyed(); | 474 print_preview_ui->OnTabDestroyed(); |
| 468 | 475 |
| 469 preview_tab_map_.erase(preview_tab); | 476 preview_tab_map_.erase(preview_tab); |
| 470 RemoveObservers(preview_tab); | 477 RemoveObservers(preview_tab); |
| 471 } | 478 } |
| 472 | 479 |
| 473 } // namespace printing | 480 } // namespace printing |
| OLD | NEW |