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, |