printing_information.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/task_manager/printing_information.h"
6
7#include "base/strings/string16.h"
8#include "base/strings/utf_string_conversions.h"
9#include "chrome/browser/browser_process.h"
10#include "chrome/browser/favicon/favicon_tab_helper.h"
11#include "chrome/browser/printing/background_printing_manager.h"
12#include "chrome/browser/printing/print_preview_dialog_controller.h"
13#include "chrome/browser/profiles/profile.h"
14#include "chrome/browser/profiles/profile_manager.h"
15#include "chrome/browser/task_manager/renderer_resource.h"
16#include "chrome/browser/task_manager/task_manager.h"
17#include "chrome/browser/task_manager/task_manager_util.h"
18#include "content/public/browser/render_frame_host.h"
19#include "content/public/browser/render_process_host.h"
20#include "content/public/browser/render_view_host.h"
21#include "content/public/browser/web_contents.h"
22#include "grit/generated_resources.h"
23#include "ui/base/l10n/l10n_util.h"
24#include "ui/gfx/image/image_skia.h"
25
26using content::WebContents;
27
28namespace task_manager {
29
30class PrintingResource : public RendererResource {
31 public:
32  explicit PrintingResource(content::WebContents* web_contents);
33  virtual ~PrintingResource();
34
35  // Resource methods:
36  virtual Type GetType() const OVERRIDE;
37  virtual base::string16 GetTitle() const OVERRIDE;
38  virtual gfx::ImageSkia GetIcon() const OVERRIDE;
39  virtual content::WebContents* GetWebContents() const OVERRIDE;
40
41 private:
42  content::WebContents* web_contents_;
43
44  DISALLOW_COPY_AND_ASSIGN(PrintingResource);
45};
46
47PrintingResource::PrintingResource(WebContents* web_contents)
48    : RendererResource(web_contents->GetRenderProcessHost()->GetHandle(),
49                       web_contents->GetRenderViewHost()),
50      web_contents_(web_contents) {}
51
52PrintingResource::~PrintingResource() {}
53
54Resource::Type PrintingResource::GetType() const { return RENDERER; }
55
56base::string16 PrintingResource::GetTitle() const {
57  return l10n_util::GetStringFUTF16(
58      IDS_TASK_MANAGER_PRINT_PREFIX,
59      util::GetTitleFromWebContents(web_contents_));
60}
61
62gfx::ImageSkia PrintingResource::GetIcon() const {
63  FaviconTabHelper::CreateForWebContents(web_contents_);
64  return FaviconTabHelper::FromWebContents(web_contents_)->
65      GetFavicon().AsImageSkia();
66}
67
68WebContents* PrintingResource::GetWebContents() const { return web_contents_; }
69
70////////////////////////////////////////////////////////////////////////////////
71// PrintingInformation class
72////////////////////////////////////////////////////////////////////////////////
73
74PrintingInformation::PrintingInformation() {}
75
76PrintingInformation::~PrintingInformation() {}
77
78bool PrintingInformation::CheckOwnership(WebContents* web_contents) {
79  printing::BackgroundPrintingManager* backgrounded_print_jobs =
80      g_browser_process->background_printing_manager();
81  // Is it a background print job?
82  if (backgrounded_print_jobs->HasPrintPreviewDialog(web_contents)) {
83    return true;
84  }
85  // Is it a foreground print preview window?
86  if (printing::PrintPreviewDialogController::IsPrintPreviewDialog(
87          web_contents)) {
88    return true;
89  }
90  return false;
91}
92
93void PrintingInformation::GetAll(const NewWebContentsCallback& callback) {
94  // Add all the pages being background printed.
95  printing::BackgroundPrintingManager* printing_manager =
96      g_browser_process->background_printing_manager();
97  std::set<content::WebContents*> printing_contents =
98      printing_manager->CurrentContentSet();
99  for (std::set<content::WebContents*>::iterator i = printing_contents.begin();
100       i != printing_contents.end();
101       ++i) {
102    callback.Run(*i);
103  }
104  // Add all the foreground print preview dialogs.
105  printing::PrintPreviewDialogController::GetInstance()->ForEachPreviewDialog(
106      callback);
107}
108
109scoped_ptr<RendererResource> PrintingInformation::MakeResource(
110    WebContents* web_contents) {
111  return scoped_ptr<RendererResource>(new PrintingResource(web_contents));
112}
113
114}  // namespace task_manager
115