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

Unified 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: rejigger dialog buttons Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media_gallery/media_galleries_dialog_controller.cc
diff --git a/chrome/browser/media_gallery/media_galleries_dialog_controller.cc b/chrome/browser/media_gallery/media_galleries_dialog_controller.cc
new file mode 100644
index 0000000000000000000000000000000000000000..96171078e196a221d64bca3fbba4ff00c1c57eab
--- /dev/null
+++ b/chrome/browser/media_gallery/media_galleries_dialog_controller.cc
@@ -0,0 +1,176 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/media_gallery/media_galleries_dialog_controller.h"
+
+#include "base/path_service.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/media_gallery/media_galleries_preferences_factory.h"
+#include "chrome/browser/ui/chrome_select_file_policy.h"
+#include "chrome/browser/ui/tab_contents/tab_contents.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/extension.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_view.h"
+#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
+
+using extensions::Extension;
+
+namespace chrome {
+
+MediaGalleriesDialogController::MediaGalleriesDialogController(
+ TabContents* tab_contents,
+ const Extension* extension,
+ MediaGalleriesDialogDelegate* delegate)
+ : tab_contents_(tab_contents),
+ extension_(extension),
+ delegate_(delegate),
+ preferences_(NULL) {
+ LookUpPermissions();
+ dialog_.reset(MediaGalleriesDialog::Create(this));
+}
+
+MediaGalleriesDialogController::~MediaGalleriesDialogController() {
+ if (select_folder_dialog_.get())
+ select_folder_dialog_->ListenerDestroyed();
+}
+
+string16 MediaGalleriesDialogController::GetHeader() {
+ return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_HEADER,
+ UTF8ToUTF16(extension_->name()));
+}
+
+string16 MediaGalleriesDialogController::GetSubtext() {
+ if (extension_->HasAPIPermission(
+ extensions::APIPermission::kMediaGalleriesRead)) {
+ return l10n_util::GetStringFUTF16(IDS_MEDIA_GALLERIES_DIALOG_READ_SUBTEXT,
+ UTF8ToUTF16(extension_->name()));
+ }
+ // TODO(estade): handle write et al.
+ return string16();
+}
+
+void MediaGalleriesDialogController::OnAddFolderClicked() {
+ FilePath user_data_dir;
+ PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
+ // TODO(estade): if file dialogs are disabled we need to handle it somehow.
+ select_folder_dialog_ =
+ ui::SelectFileDialog::Create(this, new ChromeSelectFilePolicy(NULL));
+ select_folder_dialog_->SelectFile(
+ ui::SelectFileDialog::SELECT_FOLDER,
+ l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY_TITLE),
+ user_data_dir,
+ NULL, 0, FILE_PATH_LITERAL(""),
+ tab_contents_->web_contents()->GetView()->GetTopLevelNativeWindow(),
+ NULL);
+}
+
+void MediaGalleriesDialogController::GalleryToggled(
+ const MediaGalleryPrefInfo* gallery,
+ bool enabled) {
+ // Check known galleries.
+ if (gallery->pref_id != 0 /*MediaGalleriesPreferences::kInvalidId */) {
+ known_galleries_[gallery->pref_id].second = enabled;
+ return;
+ }
+
+ // Check new galleries.
vandebo (ex-Chrome) 2012/08/06 20:39:30 You could locally assign ids to new galleries, cou
Evan Stade 2012/08/06 23:43:02 I don't think that would help very much, especiall
vandebo (ex-Chrome) 2012/08/08 19:24:21 On second thought, fragmenting the id space is pro
Evan Stade 2012/08/08 21:48:57 I'm not sure how that would work. known_gallery_ i
+ for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
+ iter != new_galleries_.end(); ++iter) {
+ if (&iter->first == gallery) {
+ iter->second = enabled;
+ return;
+ }
+ }
+
+ NOTREACHED();
+}
+
+void MediaGalleriesDialogController::DialogFinished(bool accepted) {
+ if (accepted)
+ SavePermissions();
+
+ delegate_->MediaGalleriesDialogFinished();
+ delete this;
+}
+
+void MediaGalleriesDialogController::FileSelected(const FilePath& path,
+ int index,
+ void* params) {
+ // Try to find it in |known_galleries_|.
+ MediaGalleryPrefInfo gallery;
+ if (preferences_->LookUpGalleryByPath(path, &gallery)) {
+ KnownGalleryPermissions::iterator iter =
+ known_galleries_.find(gallery.pref_id);
+
+ if (iter == known_galleries_.end()) {
+ // This is rare, but could happen if a gallery was not "known"
+ // when the controller first initialized, but has since been added.
+ known_galleries_[gallery.pref_id] = std::make_pair(gallery, true);
+ iter = known_galleries_.find(gallery.pref_id);
+ }
+
+ dialog_->UpdateGallery(&iter->second.first, true);
+ return;
+ }
+
+ // Try to find it in |new_galleries_| (user added same folder twice).
+ for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
+ iter != new_galleries_.end(); ++iter) {
+ if (iter->first.path == gallery.path &&
+ iter->first.device_id == gallery.device_id) {
+ iter->second = true;
+ dialog_->UpdateGallery(&iter->first, true);
+ return;
+ }
+ }
+
+ // Lastly, add it to |new_galleries_|.
+ new_galleries_.push_back(std::make_pair(gallery, true));
+ dialog_->UpdateGallery(&new_galleries_.back().first, true);
+}
+
+void MediaGalleriesDialogController::LookUpPermissions() {
+ DCHECK(!preferences_);
+ preferences_ =
vandebo (ex-Chrome) 2012/08/06 20:39:30 Move this bit to the constructor? Here it's not o
Evan Stade 2012/08/06 23:43:02 Done.
+ MediaGalleriesPreferencesFactory::GetForProfile(tab_contents_->profile());
+ for (MediaGalleriesPrefInfoMap::const_iterator iter =
+ preferences_->known_galleries().begin();
+ iter != preferences_->known_galleries().end();
+ ++iter) {
+ known_galleries_[iter->first] = std::make_pair(iter->second, false);
+ }
+
+ std::vector<MediaGalleryPrefId> permitted =
+ preferences_->GalleriesForExtension(*extension_);
+
+ for (std::vector<MediaGalleryPrefId>::iterator iter = permitted.begin();
+ iter != permitted.end(); ++iter) {
+ known_galleries_[*iter].second = true;
+ }
+}
+
+void MediaGalleriesDialogController::SavePermissions() {
+ for (KnownGalleryPermissions::iterator iter = known_galleries_.begin();
+ iter != known_galleries_.end(); ++iter) {
+ preferences_->SetGalleryPermissionForExtension(
+ *extension_, iter->first, iter->second.second);
+ }
+
+ for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
+ iter != new_galleries_.end(); ++iter) {
+ // If the user added a gallery then unchecked it, forget about it.
+ if (!iter->second)
+ continue;
+
+ MediaGalleryPrefInfo* gallery = &iter->first;
+ MediaGalleryPrefId id = preferences_->AddGallery(
+ gallery->device_id, gallery->display_name, gallery->path, true);
+ preferences_->SetGalleryPermissionForExtension(
+ *extension_, id, true);
+ }
+}
+
+} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698