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

Side by Side Diff: chrome/browser/printing/print_preview_tab_controller.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/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 23 matching lines...) Expand all
34 #include "content/public/browser/notification_details.h" 34 #include "content/public/browser/notification_details.h"
35 #include "content/public/browser/notification_source.h" 35 #include "content/public/browser/notification_source.h"
36 #include "content/public/browser/notification_types.h" 36 #include "content/public/browser/notification_types.h"
37 #include "webkit/plugins/webplugininfo.h" 37 #include "webkit/plugins/webplugininfo.h"
38 38
39 namespace { 39 namespace {
40 40
41 void EnableInternalPDFPluginForTab(TabContentsWrapper* preview_tab) { 41 void EnableInternalPDFPluginForTab(TabContentsWrapper* preview_tab) {
42 // Always enable the internal PDF plugin for the print preview page. 42 // Always enable the internal PDF plugin for the print preview page.
43 ChromePluginServiceFilter::GetInstance()->OverridePluginForTab( 43 ChromePluginServiceFilter::GetInstance()->OverridePluginForTab(
44 preview_tab->render_view_host()->process()->GetID(), 44 preview_tab->tab_contents()->render_view_host()->process()->GetID(),
45 preview_tab->render_view_host()->routing_id(), 45 preview_tab->tab_contents()->render_view_host()->routing_id(),
46 GURL(), 46 GURL(),
47 ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName)); 47 ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName));
48 } 48 }
49 49
50 class PrintPreviewTabDelegate : public HtmlDialogUIDelegate { 50 class PrintPreviewTabDelegate : public HtmlDialogUIDelegate {
51 public: 51 public:
52 explicit PrintPreviewTabDelegate(TabContentsWrapper* initiator_tab); 52 explicit PrintPreviewTabDelegate(TabContentsWrapper* initiator_tab);
53 virtual ~PrintPreviewTabDelegate(); 53 virtual ~PrintPreviewTabDelegate();
54 54
55 virtual bool IsDialogModal() const OVERRIDE; 55 virtual bool IsDialogModal() const OVERRIDE;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 void PrintPreviewTabController::OnRendererProcessClosed( 236 void PrintPreviewTabController::OnRendererProcessClosed(
237 content::RenderProcessHost* rph) { 237 content::RenderProcessHost* rph) {
238 // Store tabs in a vector and deal with them after iterating through 238 // Store tabs in a vector and deal with them after iterating through
239 // |preview_tab_map_| because RemoveFooTab() can change |preview_tab_map_|. 239 // |preview_tab_map_| because RemoveFooTab() can change |preview_tab_map_|.
240 std::vector<TabContentsWrapper*> closed_initiator_tabs; 240 std::vector<TabContentsWrapper*> closed_initiator_tabs;
241 std::vector<TabContentsWrapper*> closed_preview_tabs; 241 std::vector<TabContentsWrapper*> closed_preview_tabs;
242 for (PrintPreviewTabMap::iterator iter = preview_tab_map_.begin(); 242 for (PrintPreviewTabMap::iterator iter = preview_tab_map_.begin();
243 iter != preview_tab_map_.end(); ++iter) { 243 iter != preview_tab_map_.end(); ++iter) {
244 TabContentsWrapper* preview_tab = iter->first; 244 TabContentsWrapper* preview_tab = iter->first;
245 TabContentsWrapper* initiator_tab = iter->second; 245 TabContentsWrapper* initiator_tab = iter->second;
246 if (preview_tab->render_view_host()->process() == rph) { 246 if (preview_tab->tab_contents()->render_view_host()->process() == rph) {
247 closed_preview_tabs.push_back(preview_tab); 247 closed_preview_tabs.push_back(preview_tab);
248 } else if (initiator_tab && 248 } else if (initiator_tab &&
249 initiator_tab->render_view_host()->process() == rph) { 249 initiator_tab->tab_contents()->render_view_host()->process()
250 == rph) {
250 closed_initiator_tabs.push_back(initiator_tab); 251 closed_initiator_tabs.push_back(initiator_tab);
251 } 252 }
252 } 253 }
253 254
254 for (size_t i = 0; i < closed_preview_tabs.size(); ++i) { 255 for (size_t i = 0; i < closed_preview_tabs.size(); ++i) {
255 RemovePreviewTab(closed_preview_tabs[i]); 256 RemovePreviewTab(closed_preview_tabs[i]);
256 PrintPreviewUI* print_preview_ui = 257 PrintPreviewUI* print_preview_ui =
257 static_cast<PrintPreviewUI*>(closed_preview_tabs[i]->web_ui()); 258 static_cast<PrintPreviewUI*>(
259 closed_preview_tabs[i]->tab_contents()->web_ui());
258 if (print_preview_ui) 260 if (print_preview_ui)
259 print_preview_ui->OnPrintPreviewTabClosed(); 261 print_preview_ui->OnPrintPreviewTabClosed();
260 } 262 }
261 263
262 for (size_t i = 0; i < closed_initiator_tabs.size(); ++i) 264 for (size_t i = 0; i < closed_initiator_tabs.size(); ++i)
263 RemoveInitiatorTab(closed_initiator_tabs[i], false); 265 RemoveInitiatorTab(closed_initiator_tabs[i], false);
264 } 266 }
265 267
266 void PrintPreviewTabController::OnTabContentsDestroyed( 268 void PrintPreviewTabController::OnTabContentsDestroyed(
267 TabContentsWrapper* tab) { 269 TabContentsWrapper* tab) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 389
388 AddObservers(initiator_tab); 390 AddObservers(initiator_tab);
389 AddObservers(preview_tab); 391 AddObservers(preview_tab);
390 392
391 return preview_tab; 393 return preview_tab;
392 } 394 }
393 395
394 void PrintPreviewTabController::SetInitiatorTabURLAndTitle( 396 void PrintPreviewTabController::SetInitiatorTabURLAndTitle(
395 TabContentsWrapper* preview_tab) { 397 TabContentsWrapper* preview_tab) {
396 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab); 398 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab);
397 if (initiator_tab && preview_tab->web_ui()) { 399 if (initiator_tab && preview_tab->tab_contents()->web_ui()) {
398 PrintPreviewUI* print_preview_ui = 400 PrintPreviewUI* print_preview_ui =
399 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); 401 static_cast<PrintPreviewUI*>(preview_tab->tab_contents()->web_ui());
400 print_preview_ui->SetInitiatorTabURLAndTitle( 402 print_preview_ui->SetInitiatorTabURLAndTitle(
401 initiator_tab->tab_contents()->GetURL().spec(), 403 initiator_tab->tab_contents()->GetURL().spec(),
402 initiator_tab->print_view_manager()->RenderSourceName()); 404 initiator_tab->print_view_manager()->RenderSourceName());
403 } 405 }
404 } 406 }
405 407
406 void PrintPreviewTabController::AddObservers(TabContentsWrapper* tab) { 408 void PrintPreviewTabController::AddObservers(TabContentsWrapper* tab) {
407 TabContents* contents = tab->tab_contents(); 409 TabContents* contents = tab->tab_contents();
408 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, 410 registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
409 content::Source<TabContents>(contents)); 411 content::Source<TabContents>(contents));
410 registrar_.Add( 412 registrar_.Add(
411 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, 413 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
412 content::Source<NavigationController>(&contents->controller())); 414 content::Source<NavigationController>(&contents->controller()));
413 415
414 // Multiple sites may share the same RenderProcessHost, so check if this 416 // Multiple sites may share the same RenderProcessHost, so check if this
415 // notification has already been added. 417 // notification has already been added.
416 content::RenderProcessHost* rph = tab->render_view_host()->process(); 418 content::RenderProcessHost* rph =
419 tab->tab_contents()->render_view_host()->process();
417 if (!registrar_.IsRegistered(this, 420 if (!registrar_.IsRegistered(this,
418 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 421 content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
419 content::Source<content::RenderProcessHost>( 422 content::Source<content::RenderProcessHost>(
420 rph))) { 423 rph))) {
421 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 424 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
422 content::Source<content::RenderProcessHost>(rph)); 425 content::Source<content::RenderProcessHost>(rph));
423 } 426 }
424 } 427 }
425 428
426 void PrintPreviewTabController::RemoveObservers(TabContentsWrapper* tab) { 429 void PrintPreviewTabController::RemoveObservers(TabContentsWrapper* tab) {
427 TabContents* contents = tab->tab_contents(); 430 TabContents* contents = tab->tab_contents();
428 registrar_.Remove(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED, 431 registrar_.Remove(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
429 content::Source<TabContents>(contents)); 432 content::Source<TabContents>(contents));
430 registrar_.Remove( 433 registrar_.Remove(
431 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, 434 this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
432 content::Source<NavigationController>(&contents->controller())); 435 content::Source<NavigationController>(&contents->controller()));
433 436
434 // Multiple sites may share the same RenderProcessHost, so check if this 437 // Multiple sites may share the same RenderProcessHost, so check if this
435 // notification has already been added. 438 // notification has already been added.
436 content::RenderProcessHost* rph = tab->render_view_host()->process(); 439 content::RenderProcessHost* rph =
440 tab->tab_contents()->render_view_host()->process();
437 if (registrar_.IsRegistered(this, 441 if (registrar_.IsRegistered(this,
438 content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 442 content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
439 content::Source<content::RenderProcessHost>( 443 content::Source<content::RenderProcessHost>(
440 rph))) { 444 rph))) {
441 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, 445 registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
442 content::Source<content::RenderProcessHost>(rph)); 446 content::Source<content::RenderProcessHost>(rph));
443 } 447 }
444 } 448 }
445 449
446 void PrintPreviewTabController::RemoveInitiatorTab( 450 void PrintPreviewTabController::RemoveInitiatorTab(
447 TabContentsWrapper* initiator_tab, bool is_navigation) { 451 TabContentsWrapper* initiator_tab, bool is_navigation) {
448 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(initiator_tab); 452 TabContentsWrapper* preview_tab = GetPrintPreviewForTab(initiator_tab);
449 DCHECK(preview_tab); 453 DCHECK(preview_tab);
450 // Update the map entry first, so when the print preview tab gets destroyed 454 // Update the map entry first, so when the print preview tab gets destroyed
451 // and reaches RemovePreviewTab(), it does not attempt to also remove the 455 // and reaches RemovePreviewTab(), it does not attempt to also remove the
452 // initiator tab's observers. 456 // initiator tab's observers.
453 preview_tab_map_[preview_tab] = NULL; 457 preview_tab_map_[preview_tab] = NULL;
454 RemoveObservers(initiator_tab); 458 RemoveObservers(initiator_tab);
455 459
456 // For the navigation case, PrintPreviewDone() has already been called in 460 // For the navigation case, PrintPreviewDone() has already been called in
457 // PrintPreviewMessageHandler::NavigateToPendingEntry(). 461 // PrintPreviewMessageHandler::NavigateToPendingEntry().
458 if (!is_navigation) 462 if (!is_navigation)
459 initiator_tab->print_view_manager()->PrintPreviewDone(); 463 initiator_tab->print_view_manager()->PrintPreviewDone();
460 464
461 // Initiator tab is closed. Close the print preview tab too. 465 // Initiator tab is closed. Close the print preview tab too.
462 PrintPreviewUI* print_preview_ui = 466 PrintPreviewUI* print_preview_ui =
463 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); 467 static_cast<PrintPreviewUI*>(preview_tab->tab_contents()->web_ui());
464 if (print_preview_ui) 468 if (print_preview_ui)
465 print_preview_ui->OnInitiatorTabClosed(); 469 print_preview_ui->OnInitiatorTabClosed();
466 } 470 }
467 471
468 void PrintPreviewTabController::RemovePreviewTab( 472 void PrintPreviewTabController::RemovePreviewTab(
469 TabContentsWrapper* preview_tab) { 473 TabContentsWrapper* preview_tab) {
470 // Remove the initiator tab's observers before erasing the mapping. 474 // Remove the initiator tab's observers before erasing the mapping.
471 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab); 475 TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab);
472 if (initiator_tab) { 476 if (initiator_tab) {
473 RemoveObservers(initiator_tab); 477 RemoveObservers(initiator_tab);
474 initiator_tab->print_view_manager()->PrintPreviewDone(); 478 initiator_tab->print_view_manager()->PrintPreviewDone();
475 } 479 }
476 480
477 // Print preview TabContents is destroyed. Notify |PrintPreviewUI| to abort 481 // Print preview TabContents is destroyed. Notify |PrintPreviewUI| to abort
478 // the initiator tab preview request. 482 // the initiator tab preview request.
479 PrintPreviewUI* print_preview_ui = 483 PrintPreviewUI* print_preview_ui =
480 static_cast<PrintPreviewUI*>(preview_tab->web_ui()); 484 static_cast<PrintPreviewUI*>(preview_tab->tab_contents()->web_ui());
481 if (print_preview_ui) 485 if (print_preview_ui)
482 print_preview_ui->OnTabDestroyed(); 486 print_preview_ui->OnTabDestroyed();
483 487
484 preview_tab_map_.erase(preview_tab); 488 preview_tab_map_.erase(preview_tab);
485 RemoveObservers(preview_tab); 489 RemoveObservers(preview_tab);
486 } 490 }
487 491
488 } // namespace printing 492 } // namespace printing
OLDNEW
« no previous file with comments | « chrome/browser/printing/print_preview_message_handler.cc ('k') | chrome/browser/printing/print_view_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698