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

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

Issue 10826129: Media galleries: configuration dialog controller and GTK impl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix non-gtk builds Created 8 years, 4 months 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/media_gallery/media_galleries_dialog_controller.h"
6
7 #include "base/path_service.h"
8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/media_gallery/media_galleries_preferences_factory.h"
10 #include "chrome/browser/ui/chrome_select_file_policy.h"
11 #include "chrome/browser/ui/tab_contents/tab_contents.h"
12 #include "chrome/common/chrome_paths.h"
13 #include "chrome/common/extensions/extension.h"
14 #include "content/public/browser/web_contents.h"
15 #include "content/public/browser/web_contents_view.h"
16 #include "grit/generated_resources.h"
17 #include "ui/base/l10n/l10n_util.h"
18
19 using extensions::Extension;
20
21 namespace chrome {
22
23 MediaGalleriesDialogController::MediaGalleriesDialogController(
24 TabContents* tab_contents,
25 const Extension& extension,
26 const base::Callback<void(void)>& on_finish)
27 : tab_contents_(tab_contents),
28 extension_(extension),
29 on_finish_(on_finish),
30 preferences_(MediaGalleriesPreferencesFactory::GetForProfile(
31 tab_contents_->profile())) {
32 LookUpPermissions();
33
34 #if defined(TOOLKIT_GTK)
35 dialog_.reset(MediaGalleriesDialog::Create(this));
36 #else
37 NOTIMPLEMENTED();
38 #endif
39 }
40
41 MediaGalleriesDialogController::~MediaGalleriesDialogController() {
42 if (select_folder_dialog_.get())
43 select_folder_dialog_->ListenerDestroyed();
44 }
45
46 string16 MediaGalleriesDialogController::GetHeader() {
47 return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_HEADER,
48 UTF8ToUTF16(extension_.name()));
49 }
50
51 string16 MediaGalleriesDialogController::GetSubtext() {
52 if (extension_.HasAPIPermission(
53 extensions::APIPermission::kMediaGalleriesRead)) {
54 return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_READ_SUBTEXT,
55 UTF8ToUTF16(extension_.name()));
56 }
57 // TODO(estade): handle write et al.
58 return string16();
59 }
60
61 void MediaGalleriesDialogController::OnAddFolderClicked() {
62 FilePath user_data_dir;
63 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
64 // TODO(estade): if file dialogs are disabled we need to handle it somehow.
65 select_folder_dialog_ =
66 ui::SelectFileDialog::Create(this, new ChromeSelectFilePolicy(NULL));
67 select_folder_dialog_->SelectFile(
68 ui::SelectFileDialog::SELECT_FOLDER,
69 l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY_TITLE),
70 user_data_dir,
71 NULL, 0, FILE_PATH_LITERAL(""),
72 tab_contents_->web_contents()->GetView()->GetTopLevelNativeWindow(),
73 NULL);
74 }
75
76 void MediaGalleriesDialogController::GalleryToggled(
77 const MediaGalleryPrefInfo* gallery,
78 bool enabled) {
79 // Check known galleries.
80 KnownGalleryPermissions::iterator iter =
81 known_galleries_.find(gallery->pref_id);
82 if (iter != known_galleries_.end()) {
83 iter->second.allowed = enabled;
84 return;
85 }
86
87 // Check new galleries.
88 for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
89 iter != new_galleries_.end(); ++iter) {
90 if (&iter->pref_info == gallery) {
91 iter->allowed = enabled;
92 return;
93 }
94 }
95
96 NOTREACHED();
97 }
98
99 void MediaGalleriesDialogController::DialogFinished(bool accepted) {
100 if (accepted)
101 SavePermissions();
102
103 on_finish_.Run();
104 delete this;
105 }
106
107 void MediaGalleriesDialogController::FileSelected(const FilePath& path,
108 int index,
109 void* params) {
110 // Try to find it in |known_galleries_|.
111 MediaGalleryPrefInfo gallery;
112 if (preferences_->LookUpGalleryByPath(path, &gallery) &&
113 gallery.type != MediaGalleryPrefInfo::kBlackListed) {
114 KnownGalleryPermissions::iterator iter =
115 known_galleries_.find(gallery.pref_id);
116
117 if (iter == known_galleries_.end()) {
118 // This is rare, but could happen if a gallery was not "known"
119 // when the controller first initialized, but has since been added.
120 known_galleries_[gallery.pref_id] = GalleryPermission(gallery, true);
121 iter = known_galleries_.find(gallery.pref_id);
122 }
123
124 dialog_->UpdateGallery(&iter->second.pref_info, true);
125 return;
126 }
127
128 // Try to find it in |new_galleries_| (user added same folder twice).
129 for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
130 iter != new_galleries_.end(); ++iter) {
131 if (iter->pref_info.path == gallery.path &&
132 iter->pref_info.device_id == gallery.device_id) {
133 iter->allowed = true;
134 dialog_->UpdateGallery(&iter->pref_info, true);
135 return;
136 }
137 }
138
139 // Lastly, add it to |new_galleries_|.
140 new_galleries_.push_back(GalleryPermission(gallery, true));
141 dialog_->UpdateGallery(&new_galleries_.back().pref_info, true);
142 }
143
144 void MediaGalleriesDialogController::LookUpPermissions() {
145 for (MediaGalleriesPrefInfoMap::const_iterator iter =
146 preferences_->known_galleries().begin();
147 iter != preferences_->known_galleries().end();
148 ++iter) {
149 if (iter->second.type == MediaGalleryPrefInfo::kBlackListed)
150 continue;
151
152 known_galleries_[iter->first] = GalleryPermission(iter->second, false);
153 }
154
155 std::set<MediaGalleryPrefId> permitted =
156 preferences_->GalleriesForExtension(extension_);
157
158 for (std::set<MediaGalleryPrefId>::iterator iter = permitted.begin();
159 iter != permitted.end(); ++iter) {
160 known_galleries_[*iter].allowed = true;
161 }
162 }
163
164 void MediaGalleriesDialogController::SavePermissions() {
165 for (KnownGalleryPermissions::iterator iter = known_galleries_.begin();
166 iter != known_galleries_.end(); ++iter) {
167 preferences_->SetGalleryPermissionForExtension(
168 extension_, iter->first, iter->second.allowed);
169 }
170
171 for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
172 iter != new_galleries_.end(); ++iter) {
173 // If the user added a gallery then unchecked it, forget about it.
174 if (!iter->allowed)
175 continue;
176
177 const MediaGalleryPrefInfo& gallery = iter->pref_info;
178 MediaGalleryPrefId id = preferences_->AddGallery(
179 gallery.device_id, gallery.display_name, gallery.path, true);
180 preferences_->SetGalleryPermissionForExtension(
181 extension_, id, true);
182 }
183 }
184
185 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698