Home | History | Annotate | Download | only in task_manager
      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/base/resource/resource_bundle.h"
     25 #include "ui/gfx/image/image_skia.h"
     26 
     27 using content::WebContents;
     28 
     29 namespace task_manager {
     30 
     31 class PrintingResource : public RendererResource {
     32  public:
     33   explicit PrintingResource(content::WebContents* web_contents);
     34   virtual ~PrintingResource();
     35 
     36   // Resource methods:
     37   virtual Type GetType() const OVERRIDE;
     38   virtual base::string16 GetTitle() const OVERRIDE;
     39   virtual gfx::ImageSkia GetIcon() const OVERRIDE;
     40   virtual content::WebContents* GetWebContents() const OVERRIDE;
     41 
     42  private:
     43   content::WebContents* web_contents_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(PrintingResource);
     46 };
     47 
     48 PrintingResource::PrintingResource(WebContents* web_contents)
     49     : RendererResource(web_contents->GetRenderProcessHost()->GetHandle(),
     50                        web_contents->GetRenderViewHost()),
     51       web_contents_(web_contents) {}
     52 
     53 PrintingResource::~PrintingResource() {}
     54 
     55 Resource::Type PrintingResource::GetType() const { return RENDERER; }
     56 
     57 base::string16 PrintingResource::GetTitle() const {
     58   return l10n_util::GetStringFUTF16(
     59       IDS_TASK_MANAGER_PRINT_PREFIX,
     60       util::GetTitleFromWebContents(web_contents_));
     61 }
     62 
     63 gfx::ImageSkia PrintingResource::GetIcon() const {
     64   FaviconTabHelper::CreateForWebContents(web_contents_);
     65   return FaviconTabHelper::FromWebContents(web_contents_)->
     66       GetFavicon().AsImageSkia();
     67 }
     68 
     69 WebContents* PrintingResource::GetWebContents() const { return web_contents_; }
     70 
     71 ////////////////////////////////////////////////////////////////////////////////
     72 // PrintingInformation class
     73 ////////////////////////////////////////////////////////////////////////////////
     74 
     75 PrintingInformation::PrintingInformation() {}
     76 
     77 PrintingInformation::~PrintingInformation() {}
     78 
     79 bool PrintingInformation::CheckOwnership(WebContents* web_contents) {
     80   printing::BackgroundPrintingManager* backgrounded_print_jobs =
     81       g_browser_process->background_printing_manager();
     82   // Is it a background print job?
     83   if (backgrounded_print_jobs->HasPrintPreviewDialog(web_contents)) {
     84     return true;
     85   }
     86   // Is it a foreground print preview window?
     87   if (printing::PrintPreviewDialogController::IsPrintPreviewDialog(
     88           web_contents)) {
     89     return true;
     90   }
     91   return false;
     92 }
     93 
     94 void PrintingInformation::GetAll(const NewWebContentsCallback& callback) {
     95   // Add all the pages being background printed.
     96   printing::BackgroundPrintingManager* printing_manager =
     97       g_browser_process->background_printing_manager();
     98   std::set<content::WebContents*> printing_contents =
     99       printing_manager->CurrentContentSet();
    100   for (std::set<content::WebContents*>::iterator i = printing_contents.begin();
    101        i != printing_contents.end();
    102        ++i) {
    103     callback.Run(*i);
    104   }
    105   // Add all the foreground print preview dialogs.
    106   printing::PrintPreviewDialogController::GetInstance()->ForEachPreviewDialog(
    107       callback);
    108 }
    109 
    110 scoped_ptr<RendererResource> PrintingInformation::MakeResource(
    111     WebContents* web_contents) {
    112   return scoped_ptr<RendererResource>(new PrintingResource(web_contents));
    113 }
    114 
    115 }  // namespace task_manager
    116