Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: chrome/browser/media_galleries/media_galleries_dialog_controller.cc

Issue 37553002: [MediaGalleries] Add context menu for forgetting galleries. [views] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dlgfix
Patch Set: DidForgetGallery Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media_galleries/media_galleries_dialog_controller.h" 5 #include "chrome/browser/media_galleries/media_galleries_dialog_controller.h"
6 6
7 #include "base/path_service.h" 7 #include "base/path_service.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/media_galleries/media_file_system_registry.h" 11 #include "chrome/browser/media_galleries/media_file_system_registry.h"
12 #include "chrome/browser/media_galleries/media_galleries_histograms.h" 12 #include "chrome/browser/media_galleries/media_galleries_histograms.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/storage_monitor/storage_info.h" 14 #include "chrome/browser/storage_monitor/storage_info.h"
15 #include "chrome/browser/storage_monitor/storage_monitor.h" 15 #include "chrome/browser/storage_monitor/storage_monitor.h"
16 #include "chrome/browser/ui/chrome_select_file_policy.h" 16 #include "chrome/browser/ui/chrome_select_file_policy.h"
17 #include "chrome/common/chrome_paths.h" 17 #include "chrome/common/chrome_paths.h"
18 #include "chrome/common/extensions/extension.h" 18 #include "chrome/common/extensions/extension.h"
19 #include "chrome/common/extensions/permissions/media_galleries_permission.h" 19 #include "chrome/common/extensions/permissions/media_galleries_permission.h"
20 #include "chrome/common/extensions/permissions/permissions_data.h" 20 #include "chrome/common/extensions/permissions/permissions_data.h"
21 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
22 #include "content/public/browser/web_contents_view.h" 22 #include "content/public/browser/web_contents_view.h"
23 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
24 #include "ui/base/l10n/l10n_util.h" 24 #include "ui/base/l10n/l10n_util.h"
25 #include "ui/base/models/simple_menu_model.h"
25 #include "ui/base/text/bytes_formatting.h" 26 #include "ui/base/text/bytes_formatting.h"
26 27
27 using extensions::APIPermission; 28 using extensions::APIPermission;
28 using extensions::Extension; 29 using extensions::Extension;
29 30
30 namespace { 31 namespace {
31 32
32 // Comparator for sorting GalleryPermissionsVector -- sorts 33 // Comparator for sorting GalleryPermissionsVector -- sorts
33 // allowed galleries low, and then sorts by absolute path. 34 // allowed galleries low, and then sorts by absolute path.
34 bool GalleriesVectorComparator( 35 bool GalleriesVectorComparator(
35 const MediaGalleriesDialogController::GalleryPermission& a, 36 const MediaGalleriesDialogController::GalleryPermission& a,
36 const MediaGalleriesDialogController::GalleryPermission& b) { 37 const MediaGalleriesDialogController::GalleryPermission& b) {
37 if (a.allowed && !b.allowed) 38 if (a.allowed && !b.allowed)
38 return true; 39 return true;
39 if (!a.allowed && b.allowed) 40 if (!a.allowed && b.allowed)
40 return false; 41 return false;
41 42
42 return a.pref_info.AbsolutePath() < b.pref_info.AbsolutePath(); 43 return a.pref_info.AbsolutePath() < b.pref_info.AbsolutePath();
43 } 44 }
44 45
45 } // namespace 46 } // namespace
46 47
48 class GalleryContextMenuModel : public ui::SimpleMenuModel::Delegate {
49 public:
50 explicit GalleryContextMenuModel(MediaGalleriesDialogController* controller)
51 : controller_(controller), id_(kInvalidMediaGalleryPrefId) {}
52 virtual ~GalleryContextMenuModel() {}
53
54 void set_media_gallery_pref_id(MediaGalleryPrefId id) {
55 id_ = id;
56 }
57
58 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
59 return false;
60 }
61 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
62 return true;
63 }
64 virtual bool IsCommandIdVisible(int command_id) const OVERRIDE {
65 return true;
66 }
67
68 virtual bool GetAcceleratorForCommandId(
69 int command_id, ui::Accelerator* accelerator) OVERRIDE {
70 return false;
71 }
72
73 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {
74 controller_->DidForgetGallery(id_);
75 }
76
77 private:
78 MediaGalleriesDialogController* controller_;
79 MediaGalleryPrefId id_;
80 };
81
47 MediaGalleriesDialogController::MediaGalleriesDialogController( 82 MediaGalleriesDialogController::MediaGalleriesDialogController(
48 content::WebContents* web_contents, 83 content::WebContents* web_contents,
49 const Extension& extension, 84 const Extension& extension,
50 const base::Closure& on_finish) 85 const base::Closure& on_finish)
51 : web_contents_(web_contents), 86 : web_contents_(web_contents),
52 extension_(&extension), 87 extension_(&extension),
53 on_finish_(on_finish) { 88 on_finish_(on_finish) {
54 preferences_ = 89 preferences_ =
55 g_browser_process->media_file_system_registry()->GetPreferences( 90 g_browser_process->media_file_system_registry()->GetPreferences(
56 Profile::FromBrowserContext(web_contents_->GetBrowserContext())); 91 Profile::FromBrowserContext(web_contents_->GetBrowserContext()));
57 // Passing unretained pointer is safe, since the dialog controller 92 // Passing unretained pointer is safe, since the dialog controller
58 // is self-deleting, and so won't be deleted until it can be shown 93 // is self-deleting, and so won't be deleted until it can be shown
59 // and then closed. 94 // and then closed.
60 preferences_->EnsureInitialized( 95 preferences_->EnsureInitialized(
61 base::Bind(&MediaGalleriesDialogController::OnPreferencesInitialized, 96 base::Bind(&MediaGalleriesDialogController::OnPreferencesInitialized,
62 base::Unretained(this))); 97 base::Unretained(this)));
98
99 gallery_menu_model_.reset(new GalleryContextMenuModel(this));
100 ui::SimpleMenuModel* menu_model =
101 new ui::SimpleMenuModel(gallery_menu_model_.get());
102 menu_model->AddItem(1, GetDeleteMenuCommand());
vandebo (ex-Chrome) 2013/10/29 14:55:17 Now that this is in the controller, you don't need
Greg Billock 2013/10/29 17:04:06 Done.
103 context_menu_model_.reset(menu_model);
63 } 104 }
64 105
65 void MediaGalleriesDialogController::OnPreferencesInitialized() { 106 void MediaGalleriesDialogController::OnPreferencesInitialized() {
66 InitializePermissions(); 107 InitializePermissions();
67 108
68 dialog_.reset(MediaGalleriesDialog::Create(this)); 109 dialog_.reset(MediaGalleriesDialog::Create(this));
69 110
70 StorageMonitor::GetInstance()->AddObserver(this); 111 StorageMonitor::GetInstance()->AddObserver(this);
71 112
72 preferences_->AddGalleryChangeObserver(this); 113 preferences_->AddGalleryChangeObserver(this);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 else 150 else
110 id = IDS_MEDIA_GALLERIES_DIALOG_SUBTEXT_READ_ONLY; 151 id = IDS_MEDIA_GALLERIES_DIALOG_SUBTEXT_READ_ONLY;
111 152
112 return l10n_util::GetStringFUTF16(id, UTF8ToUTF16(extension_->name())); 153 return l10n_util::GetStringFUTF16(id, UTF8ToUTF16(extension_->name()));
113 } 154 }
114 155
115 string16 MediaGalleriesDialogController::GetUnattachedLocationsHeader() const { 156 string16 MediaGalleriesDialogController::GetUnattachedLocationsHeader() const {
116 return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_UNATTACHED_LOCATIONS); 157 return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_UNATTACHED_LOCATIONS);
117 } 158 }
118 159
160 string16 MediaGalleriesDialogController::GetDeleteMenuCommand() const {
161 return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_DELETE);
162 }
163
119 // TODO(gbillock): Call this something a bit more connected to the 164 // TODO(gbillock): Call this something a bit more connected to the
120 // messaging in the dialog. 165 // messaging in the dialog.
121 bool MediaGalleriesDialogController::HasPermittedGalleries() const { 166 bool MediaGalleriesDialogController::HasPermittedGalleries() const {
122 for (KnownGalleryPermissions::const_iterator iter = known_galleries_.begin(); 167 for (KnownGalleryPermissions::const_iterator iter = known_galleries_.begin();
123 iter != known_galleries_.end(); ++iter) { 168 iter != known_galleries_.end(); ++iter) {
124 if (iter->second.allowed) 169 if (iter->second.allowed)
125 return true; 170 return true;
126 } 171 }
127 172
128 // Do this? Views did. 173 // Do this? Views did.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 for (GalleryPermissionsVector::iterator iter = new_galleries_.begin(); 256 for (GalleryPermissionsVector::iterator iter = new_galleries_.begin();
212 iter != new_galleries_.end(); ++iter) { 257 iter != new_galleries_.end(); ++iter) {
213 if (iter->pref_info.path == gallery.path && 258 if (iter->pref_info.path == gallery.path &&
214 iter->pref_info.device_id == gallery.device_id) { 259 iter->pref_info.device_id == gallery.device_id) {
215 iter->allowed = enabled; 260 iter->allowed = enabled;
216 return; 261 return;
217 } 262 }
218 } 263 }
219 } 264 }
220 265
266 void MediaGalleriesDialogController::DidForgetGallery(
267 MediaGalleryPrefId pref_id) {
268 DCHECK(preferences_);
269 preferences_->ForgetGalleryById(pref_id);
270 }
271
221 void MediaGalleriesDialogController::DialogFinished(bool accepted) { 272 void MediaGalleriesDialogController::DialogFinished(bool accepted) {
222 // The dialog has finished, so there is no need to watch for more updates 273 // The dialog has finished, so there is no need to watch for more updates
223 // from |preferences_|. Do this here and not in the dtor since this is the 274 // from |preferences_|. Do this here and not in the dtor since this is the
224 // only non-test code path that deletes |this|. The test ctor never adds 275 // only non-test code path that deletes |this|. The test ctor never adds
225 // this observer in the first place. 276 // this observer in the first place.
226 preferences_->RemoveGalleryChangeObserver(this); 277 preferences_->RemoveGalleryChangeObserver(this);
227 278
228 if (accepted) 279 if (accepted)
229 SavePermissions(); 280 SavePermissions();
230 281
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 456 }
406 457
407 dialog_->UpdateGalleries(); 458 dialog_->UpdateGalleries();
408 } 459 }
409 460
410 void MediaGalleriesDialogController::UpdateGalleriesOnDeviceEvent( 461 void MediaGalleriesDialogController::UpdateGalleriesOnDeviceEvent(
411 const std::string& device_id) { 462 const std::string& device_id) {
412 dialog_->UpdateGalleries(); 463 dialog_->UpdateGalleries();
413 } 464 }
414 465
466 ui::MenuModel* MediaGalleriesDialogController::GetContextMenuModel(
467 MediaGalleryPrefId id) {
468 gallery_menu_model_->set_media_gallery_pref_id(id);
469 return context_menu_model_.get();
470 }
471
415 // MediaGalleries dialog ------------------------------------------------------- 472 // MediaGalleries dialog -------------------------------------------------------
416 473
417 MediaGalleriesDialog::~MediaGalleriesDialog() {} 474 MediaGalleriesDialog::~MediaGalleriesDialog() {}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698