Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / browser / media_galleries / media_galleries_scan_result_controller.h
blobb918dddda8dc0d43b75de976143fcb4e13872003
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.
5 #ifndef CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_SCAN_RESULT_CONTROLLER_H_
6 #define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_SCAN_RESULT_CONTROLLER_H_
8 #include <map>
9 #include <set>
10 #include <string>
12 #include "base/callback.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/strings/string16.h"
15 #include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
16 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
17 #include "components/storage_monitor/removable_storage_observer.h"
19 namespace content {
20 class WebContents;
23 namespace extensions {
24 class Extension;
27 namespace ui {
28 class MenuModel;
31 class MediaGalleriesScanResultController;
32 class MediaGalleryContextMenu;
33 class Profile;
35 // The controller is responsible for handling the logic of the dialog and
36 // interfacing with the model (i.e., MediaGalleriesPreferences). It shows
37 // the dialog and owns itself.
38 class MediaGalleriesScanResultController
39 : public MediaGalleriesDialogController,
40 public storage_monitor::RemovableStorageObserver,
41 public MediaGalleriesPreferences::GalleryChangeObserver {
42 public:
43 // |preferences| must be already initialized.
44 static size_t ScanResultCountForExtension(
45 MediaGalleriesPreferences* preferences,
46 const extensions::Extension* extension);
48 // The constructor creates a dialog controller which owns itself.
49 MediaGalleriesScanResultController(
50 content::WebContents* web_contents,
51 const extensions::Extension& extension,
52 const base::Closure& on_finish);
54 // MediaGalleriesDialogController implementation.
55 base::string16 GetHeader() const override;
56 base::string16 GetSubtext() const override;
57 bool IsAcceptAllowed() const override;
58 bool ShouldShowFolderViewer(const Entry& entry) const override;
59 std::vector<base::string16> GetSectionHeaders() const override;
60 Entries GetSectionEntries(size_t index) const override;
61 base::string16 GetAuxiliaryButtonText() const override;
62 void DidClickAuxiliaryButton() override;
63 void DidToggleEntry(MediaGalleryPrefId id, bool selected) override;
64 void DidClickOpenFolderViewer(MediaGalleryPrefId id) override;
65 void DidForgetEntry(MediaGalleryPrefId id) override;
66 base::string16 GetAcceptButtonText() const override;
67 void DialogFinished(bool accepted) override;
68 ui::MenuModel* GetContextMenu(MediaGalleryPrefId id) override;
69 content::WebContents* WebContents() override;
71 protected:
72 typedef base::Callback<MediaGalleriesDialog* (
73 MediaGalleriesDialogController*)> CreateDialogCallback;
74 typedef std::map<MediaGalleryPrefId, Entry> ScanResults;
76 // Updates |scan_results| from |preferences|. Will not add galleries from
77 // |ignore_list| onto |scan_results|.
78 static void UpdateScanResultsFromPreferences(
79 MediaGalleriesPreferences* preferences,
80 const extensions::Extension* extension,
81 MediaGalleryPrefIdSet ignore_list,
82 ScanResults* scan_results);
84 // Used for unit tests.
85 MediaGalleriesScanResultController(
86 const extensions::Extension& extension,
87 MediaGalleriesPreferences* preferences_,
88 const CreateDialogCallback& create_dialog_callback,
89 const base::Closure& on_finish);
91 ~MediaGalleriesScanResultController() override;
93 private:
94 friend class MediaGalleriesScanResultControllerTest;
95 friend class MediaGalleriesScanResultCocoaTest;
96 friend class TestMediaGalleriesAddScanResultsFunction;
98 // Bottom half of constructor -- called when |preferences_| is initialized.
99 void OnPreferencesInitialized();
101 // Used to keep the dialog in sync with the preferences.
102 void OnPreferenceUpdate(const std::string& extension_id);
104 // Used to keep the dialog in sync with attached and detached devices.
105 void OnRemovableDeviceUpdate(const std::string device_id);
107 Profile* GetProfile() const;
109 // RemovableStorageObserver implementation.
110 // Used to keep dialog in sync with removable device status.
111 void OnRemovableStorageAttached(
112 const storage_monitor::StorageInfo& info) override;
113 void OnRemovableStorageDetached(
114 const storage_monitor::StorageInfo& info) override;
116 // MediaGalleriesPreferences::GalleryChangeObserver implementations.
117 // Used to keep the dialog in sync when the preferences change.
118 void OnPermissionAdded(MediaGalleriesPreferences* pref,
119 const std::string& extension_id,
120 MediaGalleryPrefId pref_id) override;
121 void OnPermissionRemoved(MediaGalleriesPreferences* pref,
122 const std::string& extension_id,
123 MediaGalleryPrefId pref_id) override;
124 void OnGalleryAdded(MediaGalleriesPreferences* pref,
125 MediaGalleryPrefId pref_id) override;
126 void OnGalleryRemoved(MediaGalleriesPreferences* pref,
127 MediaGalleryPrefId pref_id) override;
128 void OnGalleryInfoUpdated(MediaGalleriesPreferences* pref,
129 MediaGalleryPrefId pref_id) override;
131 // The web contents from which the request originated.
132 content::WebContents* web_contents_;
134 // This is just a reference, but it's assumed that it won't become invalid
135 // while the dialog is showing.
136 const extensions::Extension* extension_;
138 // The scan results that aren't blacklisted and this extension doesn't
139 // already have access to.
140 ScanResults scan_results_;
142 // The set of scan results which should be removed (blacklisted) - unless
143 // the user clicks Cancel.
144 MediaGalleryPrefIdSet results_to_remove_;
146 // Callback to run when the dialog closes.
147 base::Closure on_finish_;
149 // The model that tracks galleries and extensions' permissions.
150 // This is the authoritative source for gallery information.
151 MediaGalleriesPreferences* preferences_;
153 // Creates the dialog. Only changed for unit tests.
154 CreateDialogCallback create_dialog_callback_;
156 // The view that's showing.
157 scoped_ptr<MediaGalleriesDialog> dialog_;
159 scoped_ptr<MediaGalleryContextMenu> context_menu_;
161 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesScanResultController);
164 #endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_SCAN_RESULT_CONTROLLER_H_