| Index: chrome/browser/printing/print_preview_manager.cc
|
| ===================================================================
|
| --- chrome/browser/printing/print_preview_manager.cc (revision 71344)
|
| +++ chrome/browser/printing/print_preview_manager.cc (working copy)
|
| @@ -1,9 +1,10 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/browser/printing/print_preview_tab_controller.h"
|
| +#include "chrome/browser/printing/print_preview_manager.h"
|
|
|
| +#include "base/shared_memory.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/tab_contents/tab_contents.h"
|
| #include "chrome/browser/tabs/tab_strip_model.h"
|
| @@ -17,20 +18,32 @@
|
|
|
| namespace printing {
|
|
|
| -PrintPreviewTabController::PrintPreviewTabController()
|
| +PrintPreviewManager::PrintPreviewManager()
|
| : waiting_for_new_preview_page_(false) {
|
| }
|
|
|
| -PrintPreviewTabController::~PrintPreviewTabController() {}
|
| +PrintPreviewManager::~PrintPreviewManager() {
|
| + for (PrintPreviewDataMap::iterator it = preview_data_map_.begin();
|
| + it != preview_data_map_.end(); ++it) {
|
| + delete it->second.first; // Deleting SharedMemory;
|
| + }
|
| +}
|
|
|
| // static
|
| -PrintPreviewTabController* PrintPreviewTabController::GetInstance() {
|
| +PrintPreviewManager* PrintPreviewManager::GetInstance() {
|
| if (!g_browser_process)
|
| return NULL;
|
| - return g_browser_process->print_preview_tab_controller();
|
| + return g_browser_process->print_preview_manager();
|
| }
|
|
|
| -TabContents* PrintPreviewTabController::GetOrCreatePreviewTab(
|
| +// static
|
| +bool PrintPreviewManager::IsPrintPreviewTab(TabContents* tab) {
|
| + const GURL& url = tab->GetURL();
|
| + return (url.SchemeIs(chrome::kChromeUIScheme) &&
|
| + url.host() == chrome::kChromeUIPrintHost);
|
| +}
|
| +
|
| +TabContents* PrintPreviewManager::GetOrCreatePreviewTab(
|
| TabContents* initiator_tab, int browser_window_id ) {
|
| DCHECK(initiator_tab);
|
|
|
| @@ -44,9 +57,28 @@
|
| return CreatePrintPreviewTab(initiator_tab, browser_window_id);
|
| }
|
|
|
| -void PrintPreviewTabController::Observe(NotificationType type,
|
| - const NotificationSource& source,
|
| - const NotificationDetails& details) {
|
| +bool PrintPreviewManager::GetPrintPreviewData(TabContents* preview_tab,
|
| + PrintPreviewData* data) {
|
| + PrintPreviewDataMap::iterator it = preview_data_map_.find(preview_tab);
|
| + if (it == preview_data_map_.end())
|
| + return false;
|
| + *data = it->second;
|
| + return true;
|
| +}
|
| +
|
| +bool PrintPreviewManager::SetPrintPreviewData(TabContents* preview_tab,
|
| + const PrintPreviewData& data) {
|
| + PrintPreviewDataMap::iterator it = preview_data_map_.find(preview_tab);
|
| + if (it == preview_data_map_.end())
|
| + return false;
|
| + delete it->second.first; // Deleting old SharedMemory.
|
| + it->second = data;
|
| + return true;
|
| +}
|
| +
|
| +void PrintPreviewManager::Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| TabContents* initiator_tab = NULL;
|
| TabContents* preview_tab = NULL;
|
| TabContents* source_tab = NULL;
|
| @@ -75,7 +107,7 @@
|
| preview_tab = GetPrintPreviewForTab(source_tab);
|
|
|
| // |source_tab| is preview tab.
|
| - if (preview_tab == source_tab)
|
| + if (source_tab == preview_tab)
|
| initiator_tab = GetInitiatorTab(source_tab);
|
| else
|
| initiator_tab = source_tab;
|
| @@ -109,13 +141,14 @@
|
| }
|
|
|
| // If |source_tab| is |initiator_tab|, update the map entry.
|
| - if (source_tab == initiator_tab) {
|
| + if (source_tab == initiator_tab)
|
| preview_tab_map_[preview_tab] = NULL;
|
| - }
|
|
|
| // If |source_tab| is |preview_tab|, erase the map entry.
|
| if (source_tab == preview_tab) {
|
| preview_tab_map_.erase(preview_tab);
|
| + delete preview_data_map_[preview_tab].first; // Deleting old SharedMemory.
|
| + preview_data_map_.erase(preview_tab);
|
| RemoveObservers(preview_tab);
|
| }
|
|
|
| @@ -123,23 +156,14 @@
|
| RemoveObservers(initiator_tab);
|
| }
|
|
|
| -// static
|
| -bool PrintPreviewTabController::IsPrintPreviewTab(TabContents* tab) {
|
| - const GURL& url = tab->GetURL();
|
| - return (url.SchemeIs(chrome::kChromeUIScheme) &&
|
| - url.host() == chrome::kChromeUIPrintHost);
|
| -}
|
| -
|
| -TabContents* PrintPreviewTabController::GetInitiatorTab(
|
| - TabContents* preview_tab) {
|
| +TabContents* PrintPreviewManager::GetInitiatorTab(TabContents* preview_tab) {
|
| PrintPreviewTabMap::iterator it = preview_tab_map_.find(preview_tab);
|
| if (it != preview_tab_map_.end())
|
| return preview_tab_map_[preview_tab];
|
| return NULL;
|
| }
|
|
|
| -TabContents* PrintPreviewTabController::GetPrintPreviewForTab(
|
| - TabContents* tab) {
|
| +TabContents* PrintPreviewManager::GetPrintPreviewForTab(TabContents* tab) {
|
| PrintPreviewTabMap::iterator it = preview_tab_map_.find(tab);
|
| if (it != preview_tab_map_.end())
|
| return tab;
|
| @@ -151,7 +175,7 @@
|
| return NULL;
|
| }
|
|
|
| -TabContents* PrintPreviewTabController::CreatePrintPreviewTab(
|
| +TabContents* PrintPreviewManager::CreatePrintPreviewTab(
|
| TabContents* initiator_tab, int browser_window_id) {
|
| Browser* current_browser = BrowserList::FindBrowserWithID(browser_window_id);
|
| // Add a new tab next to initiator tab.
|
| @@ -162,27 +186,29 @@
|
| params.tabstrip_index = current_browser->tabstrip_model()->
|
| GetWrapperIndex(initiator_tab) + 1;
|
| browser::Navigate(¶ms);
|
| - TabContentsWrapper* preview_tab = params.target_contents;
|
| - preview_tab->tab_contents()->Activate();
|
| + TabContents* preview_tab = params.target_contents->tab_contents();
|
| + preview_tab->Activate();
|
|
|
| // Add an entry to the map.
|
| - preview_tab_map_[preview_tab->tab_contents()] = initiator_tab;
|
| + preview_tab_map_[preview_tab] = initiator_tab;
|
| + preview_data_map_[preview_tab] =
|
| + std::make_pair(static_cast<base::SharedMemory*>(NULL), 0U);
|
| waiting_for_new_preview_page_ = true;
|
|
|
| AddObservers(initiator_tab);
|
| - AddObservers(preview_tab->tab_contents());
|
| + AddObservers(preview_tab);
|
|
|
| - return preview_tab->tab_contents();
|
| + return preview_tab;
|
| }
|
|
|
| -void PrintPreviewTabController::AddObservers(TabContents* tab) {
|
| +void PrintPreviewManager::AddObservers(TabContents* tab) {
|
| registrar_.Add(this, NotificationType::TAB_CONTENTS_DESTROYED,
|
| Source<TabContents>(tab));
|
| registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED,
|
| Source<NavigationController>(&tab->controller()));
|
| }
|
|
|
| -void PrintPreviewTabController::RemoveObservers(TabContents* tab) {
|
| +void PrintPreviewManager::RemoveObservers(TabContents* tab) {
|
| registrar_.Remove(this, NotificationType::TAB_CONTENTS_DESTROYED,
|
| Source<TabContents>(tab));
|
| registrar_.Remove(this, NotificationType::NAV_ENTRY_COMMITTED,
|
|
|