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

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: 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 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..0a14d2a8c9401a1bbc787d5a71c49b9fc6469774
--- /dev/null
+++ b/chrome/browser/media_gallery/media_galleries_dialog_controller.cc
@@ -0,0 +1,185 @@
+// 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,
+ const base::Callback<void(void)>& on_finish)
+ : tab_contents_(tab_contents),
+ extension_(extension),
+ on_finish_(on_finish),
+ preferences_(MediaGalleriesPreferencesFactory::GetForProfile(
+ tab_contents_->profile())) {
+ LookUpPermissions();
+
+#if defined(TOOLKIT_GTK)
+ dialog_.reset(MediaGalleriesDialog::Create(this));
+#else
+ NOTIMPLEMENTED();
+#endif
+}
+
+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.
+ KnownGalleryPermissions::iterator iter =
+ known_galleries_.find(gallery->pref_id);
+ if (iter != known_galleries_.end()) {
+ iter->second.allowed = enabled;
+ return;
+ }
+
+ // Check new galleries.
+ for (NewGalleryPermissions::iterator iter = new_galleries_.begin();
+ iter != new_galleries_.end(); ++iter) {
+ if (&iter->pref_info == gallery) {
+ iter->allowed = enabled;
+ return;
+ }
+ }
+
+ NOTREACHED();
+}
+
+void MediaGalleriesDialogController::DialogFinished(bool accepted) {
+ if (accepted)
+ SavePermissions();
+
+ on_finish_.Run();
+ 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) &&
+ gallery.type != MediaGalleryPrefInfo::kBlackListed) {
+ 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] = GalleryPermission(gallery, true);
+ iter = known_galleries_.find(gallery.pref_id);
+ }
+
+ dialog_->UpdateGallery(&iter->second.pref_info, 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->pref_info.path == gallery.path &&
+ iter->pref_info.device_id == gallery.device_id) {
+ iter->allowed = true;
+ dialog_->UpdateGallery(&iter->pref_info, true);
+ return;
+ }
+ }
+
+ // Lastly, add it to |new_galleries_|.
+ new_galleries_.push_back(GalleryPermission(gallery, true));
+ dialog_->UpdateGallery(&new_galleries_.back().pref_info, true);
+}
+
+void MediaGalleriesDialogController::LookUpPermissions() {
+ for (MediaGalleriesPrefInfoMap::const_iterator iter =
+ preferences_->known_galleries().begin();
+ iter != preferences_->known_galleries().end();
+ ++iter) {
+ if (iter->second.type == MediaGalleryPrefInfo::kBlackListed)
+ continue;
+
+ known_galleries_[iter->first] = GalleryPermission(iter->second, false);
+ }
+
+ std::set<MediaGalleryPrefId> permitted =
+ preferences_->GalleriesForExtension(extension_);
+
+ for (std::set<MediaGalleryPrefId>::iterator iter = permitted.begin();
+ iter != permitted.end(); ++iter) {
+ known_galleries_[*iter].allowed = true;
+ }
+}
+
+void MediaGalleriesDialogController::SavePermissions() {
+ for (KnownGalleryPermissions::iterator iter = known_galleries_.begin();
+ iter != known_galleries_.end(); ++iter) {
+ preferences_->SetGalleryPermissionForExtension(
+ extension_, iter->first, iter->second.allowed);
+ }
+
+ 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->allowed)
+ continue;
+
+ const MediaGalleryPrefInfo& gallery = iter->pref_info;
+ 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