• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_UI_WEBUI_DOWNLOADS_DOM_HANDLER_H_
6 #define CHROME_BROWSER_UI_WEBUI_DOWNLOADS_DOM_HANDLER_H_
7 #pragma once
8 
9 #include <vector>
10 
11 #include "base/memory/scoped_callback_factory.h"
12 #include "chrome/browser/download/download_item.h"
13 #include "chrome/browser/download/download_manager.h"
14 #include "content/browser/webui/web_ui.h"
15 
16 class ListValue;
17 
18 // The handler for Javascript messages related to the "downloads" view,
19 // also observes changes to the download manager.
20 class DownloadsDOMHandler : public WebUIMessageHandler,
21                             public DownloadManager::Observer,
22                             public DownloadItem::Observer {
23  public:
24   explicit DownloadsDOMHandler(DownloadManager* dlm);
25   virtual ~DownloadsDOMHandler();
26 
27   void Init();
28 
29   // WebUIMessageHandler implementation.
30   virtual void RegisterMessages();
31 
32   // DownloadItem::Observer interface
33   virtual void OnDownloadUpdated(DownloadItem* download);
OnDownloadOpened(DownloadItem * download)34   virtual void OnDownloadOpened(DownloadItem* download) { }
35 
36   // DownloadManager::Observer interface
37   virtual void ModelChanged();
38 
39   // Callback for the "getDownloads" message.
40   void HandleGetDownloads(const ListValue* args);
41 
42   // Callback for the "openFile" message - opens the file in the shell.
43   void HandleOpenFile(const ListValue* args);
44 
45   // Callback for the "drag" message - initiates a file object drag.
46   void HandleDrag(const ListValue* args);
47 
48   // Callback for the "saveDangerous" message - specifies that the user
49   // wishes to save a dangerous file.
50   void HandleSaveDangerous(const ListValue* args);
51 
52   // Callback for the "discardDangerous" message - specifies that the user
53   // wishes to discard (remove) a dangerous file.
54   void HandleDiscardDangerous(const ListValue* args);
55 
56   // Callback for the "show" message - shows the file in explorer.
57   void HandleShow(const ListValue* args);
58 
59   // Callback for the "pause" message - pauses the file download.
60   void HandlePause(const ListValue* args);
61 
62   // Callback for the "remove" message - removes the file download from shelf
63   // and list.
64   void HandleRemove(const ListValue* args);
65 
66   // Callback for the "cancel" message - cancels the download.
67   void HandleCancel(const ListValue* args);
68 
69   // Callback for the "clearAll" message - clears all the downloads.
70   void HandleClearAll(const ListValue* args);
71 
72  private:
73   // Send the current list of downloads to the page.
74   void SendCurrentDownloads();
75 
76   // Clear all download items and their observers.
77   void ClearDownloadItems();
78 
79   // Return the download that corresponds to a given id.
80   DownloadItem* GetDownloadById(int id);
81 
82   // Return the download that is referred to in a given value.
83   DownloadItem* GetDownloadByValue(const ListValue* args);
84 
85   // Current search text.
86   std::wstring search_text_;
87 
88   // Our model
89   DownloadManager* download_manager_;
90 
91   // The current set of visible DownloadItems for this view received from the
92   // DownloadManager. DownloadManager owns the DownloadItems. The vector is
93   // kept in order, sorted by ascending start time.
94   typedef std::vector<DownloadItem*> OrderedDownloads;
95   OrderedDownloads download_items_;
96 
97   base::ScopedCallbackFactory<DownloadsDOMHandler> callback_factory_;
98 
99   DISALLOW_COPY_AND_ASSIGN(DownloadsDOMHandler);
100 };
101 
102 #endif  // CHROME_BROWSER_UI_WEBUI_DOWNLOADS_DOM_HANDLER_H_
103