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

Unified Diff: chrome/browser/media_galleries/media_galleries_scan_result_dialog_controller.cc

Issue 318733003: Use the media galleries controller interface for the scan result dialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: One more const Created 6 years, 6 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_galleries/media_galleries_scan_result_dialog_controller.cc
diff --git a/chrome/browser/media_galleries/media_galleries_scan_result_dialog_controller.cc b/chrome/browser/media_galleries/media_galleries_scan_result_dialog_controller.cc
deleted file mode 100644
index 91a3a5bc35e2d96359043a575b15a3be40137712..0000000000000000000000000000000000000000
--- a/chrome/browser/media_galleries/media_galleries_scan_result_dialog_controller.cc
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2014 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_galleries/media_galleries_scan_result_dialog_controller.h"
-
-#include <algorithm>
-#include <list>
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/stl_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/media_galleries/media_file_system_registry.h"
-#include "chrome/browser/media_galleries/media_galleries_histograms.h"
-#include "chrome/browser/media_galleries/media_gallery_context_menu.h"
-#include "chrome/browser/platform_util.h"
-#include "chrome/browser/profiles/profile.h"
-#include "components/storage_monitor/storage_info.h"
-#include "components/storage_monitor/storage_monitor.h"
-#include "content/public/browser/web_contents.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/permissions/media_galleries_permission.h"
-#include "extensions/common/permissions/permissions_data.h"
-#include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-
-using storage_monitor::StorageInfo;
-using storage_monitor::StorageMonitor;
-
-namespace {
-
-// Comparator for sorting OrderedScanResults -- more files first and then sorts
-// by absolute path.
-bool ScanResultsComparator(
- const MediaGalleriesScanResultDialogController::ScanResult& a,
- const MediaGalleriesScanResultDialogController::ScanResult& b) {
- int a_media_count = a.pref_info.audio_count + a.pref_info.image_count +
- a.pref_info.video_count;
- int b_media_count = b.pref_info.audio_count + b.pref_info.image_count +
- b.pref_info.video_count;
- if (a_media_count == b_media_count)
- return a.pref_info.AbsolutePath() < b.pref_info.AbsolutePath();
- return a_media_count > b_media_count;
-}
-
-} // namespace
-
-// static
-size_t MediaGalleriesScanResultDialogController::ScanResultCountForExtension(
- MediaGalleriesPreferences* preferences,
- const extensions::Extension* extension) {
- ScanResults scan_results;
- UpdateScanResultsFromPreferences(preferences, extension,
- MediaGalleryPrefIdSet(), &scan_results);
- return scan_results.size();
-}
-
-MediaGalleriesScanResultDialogController::
-MediaGalleriesScanResultDialogController(
- content::WebContents* web_contents,
- const extensions::Extension& extension,
- const base::Closure& on_finish)
- : web_contents_(web_contents),
- extension_(&extension),
- on_finish_(on_finish) {
- // TODO(vandebo): Put this in the intializer list after GTK is removed.
-#if defined(USE_AURA) || defined(OS_MACOSX)
- create_dialog_callback_ = base::Bind(&MediaGalleriesScanResultDialog::Create);
-#endif // USE_AURA || OS_MACOSX
- preferences_ =
- g_browser_process->media_file_system_registry()->GetPreferences(
- GetProfile());
- // Passing unretained pointer is safe, since the dialog controller
- // is self-deleting, and so won't be deleted until it can be shown
- // and then closed.
- preferences_->EnsureInitialized(base::Bind(
- &MediaGalleriesScanResultDialogController::OnPreferencesInitialized,
- base::Unretained(this)));
-
- // Unretained is safe because |this| owns |context_menu_|.
- context_menu_.reset(new MediaGalleryContextMenu(base::Bind(
- &MediaGalleriesScanResultDialogController::DidForgetGallery,
- base::Unretained(this))));
-}
-
-MediaGalleriesScanResultDialogController::
-MediaGalleriesScanResultDialogController(
- const extensions::Extension& extension,
- MediaGalleriesPreferences* preferences,
- const CreateDialogCallback& create_dialog_callback,
- const base::Closure& on_finish)
- : web_contents_(NULL),
- extension_(&extension),
- on_finish_(on_finish),
- preferences_(preferences),
- create_dialog_callback_(create_dialog_callback) {
- OnPreferencesInitialized();
-}
-
-MediaGalleriesScanResultDialogController::
-~MediaGalleriesScanResultDialogController() {
- // |preferences_| may be NULL in tests.
- if (preferences_)
- preferences_->RemoveGalleryChangeObserver(this);
- if (StorageMonitor::GetInstance())
- StorageMonitor::GetInstance()->RemoveObserver(this);
-}
-
-base::string16 MediaGalleriesScanResultDialogController::GetHeader() const {
- return l10n_util::GetStringFUTF16(
- IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_HEADER,
- base::UTF8ToUTF16(extension_->name()));
-}
-
-base::string16 MediaGalleriesScanResultDialogController::GetSubtext() const {
- extensions::MediaGalleriesPermission::CheckParam copy_to_param(
- extensions::MediaGalleriesPermission::kCopyToPermission);
- extensions::MediaGalleriesPermission::CheckParam delete_param(
- extensions::MediaGalleriesPermission::kDeletePermission);
- const extensions::PermissionsData* permissions_data =
- extension_->permissions_data();
- bool has_copy_to_permission = permissions_data->CheckAPIPermissionWithParam(
- extensions::APIPermission::kMediaGalleries, &copy_to_param);
- bool has_delete_permission = permissions_data->CheckAPIPermissionWithParam(
- extensions::APIPermission::kMediaGalleries, &delete_param);
-
- int id;
- if (has_copy_to_permission)
- id = IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_SUBTEXT_READ_WRITE;
- else if (has_delete_permission)
- id = IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_SUBTEXT_READ_DELETE;
- else
- id = IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_SUBTEXT_READ_ONLY;
-
- return l10n_util::GetStringFUTF16(id, base::UTF8ToUTF16(extension_->name()));
-}
-
-MediaGalleriesScanResultDialogController::OrderedScanResults
-MediaGalleriesScanResultDialogController::GetGalleryList() const {
- OrderedScanResults result;
- result.reserve(scan_results_.size());
- for (ScanResults::const_iterator it = scan_results_.begin();
- it != scan_results_.end();
- ++it) {
- result.push_back(it->second);
- }
- std::sort(result.begin(), result.end(), ScanResultsComparator);
- return result;
-}
-
-void MediaGalleriesScanResultDialogController::DidToggleGalleryId(
- MediaGalleryPrefId pref_id, bool selected) {
- DCHECK(ContainsKey(scan_results_, pref_id));
- ScanResults::iterator entry = scan_results_.find(pref_id);
- entry->second.selected = selected;
-}
-
-void MediaGalleriesScanResultDialogController::DidClickOpenFolderViewer(
- MediaGalleryPrefId pref_id) const {
- ScanResults::const_iterator entry = scan_results_.find(pref_id);
- if (entry == scan_results_.end()) {
- NOTREACHED();
- return;
- }
- platform_util::OpenItem(GetProfile(), entry->second.pref_info.AbsolutePath());
-}
-
-void MediaGalleriesScanResultDialogController::DidForgetGallery(
- MediaGalleryPrefId pref_id) {
- media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS_FORGET_GALLERY);
- results_to_remove_.insert(pref_id);
- scan_results_.erase(pref_id);
- dialog_->UpdateResults();
-}
-
-void MediaGalleriesScanResultDialogController::DialogFinished(bool accepted) {
- // No longer interested in preference updates (and the below code generates
- // some).
- // |preferences_| may be NULL in tests.
- if (preferences_)
- preferences_->RemoveGalleryChangeObserver(this);
-
- if (accepted) {
- DCHECK(preferences_);
- media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS_ACCEPTED);
- int granted = 0;
- int total = 0;
- for (ScanResults::const_iterator it = scan_results_.begin();
- it != scan_results_.end();
- ++it) {
- if (it->second.selected) {
- bool changed = preferences_->SetGalleryPermissionForExtension(
- *extension_, it->first, true);
- DCHECK(changed);
- granted++;
- }
- total++;
- }
- if (total > 0) {
- UMA_HISTOGRAM_PERCENTAGE("MediaGalleries.ScanGalleriesGranted",
- (granted * 100 / total));
- }
- for (MediaGalleryPrefIdSet::const_iterator it = results_to_remove_.begin();
- it != results_to_remove_.end();
- ++it) {
- preferences_->ForgetGalleryById(*it);
- }
- } else {
- media_galleries::UsageCount(media_galleries::ADD_SCAN_RESULTS_CANCELLED);
- }
-
- on_finish_.Run();
- delete this;
-}
-
-content::WebContents* MediaGalleriesScanResultDialogController::web_contents() {
- return web_contents_;
-}
-
-ui::MenuModel* MediaGalleriesScanResultDialogController::GetContextMenu(
- MediaGalleryPrefId id) {
- context_menu_->set_pref_id(id);
- return context_menu_.get();
-}
-
-// static
-void MediaGalleriesScanResultDialogController::UpdateScanResultsFromPreferences(
- MediaGalleriesPreferences* preferences,
- const extensions::Extension* extension,
- MediaGalleryPrefIdSet ignore_list, ScanResults* scan_results) {
- DCHECK(preferences->IsInitialized());
- const MediaGalleriesPrefInfoMap& galleries = preferences->known_galleries();
- MediaGalleryPrefIdSet permitted =
- preferences->GalleriesForExtension(*extension);
-
- // Add or update any scan results that the extension doesn't already have
- // access to or isn't in |ignore_list|.
- for (MediaGalleriesPrefInfoMap::const_iterator it = galleries.begin();
- it != galleries.end();
- ++it) {
- const MediaGalleryPrefInfo& gallery = it->second;
- if ((gallery.audio_count || gallery.image_count || gallery.video_count) &&
- !gallery.IsBlackListedType() &&
- !ContainsKey(permitted, gallery.pref_id) &&
- !ContainsKey(ignore_list, gallery.pref_id)) {
- ScanResults::iterator existing = scan_results->find(gallery.pref_id);
- if (existing == scan_results->end()) {
- // Default to selected.
- (*scan_results)[gallery.pref_id] = ScanResult(gallery, true);
- } else {
- // Update pref_info, in case anything has been updated.
- existing->second.pref_info = gallery;
- }
- }
- }
-
- // Remove anything from |scan_results| that's no longer valid or the user
- // already has access to.
- std::list<ScanResults::iterator> to_remove;
- for (ScanResults::iterator it = scan_results->begin();
- it != scan_results->end();
- ++it) {
- MediaGalleriesPrefInfoMap::const_iterator pref_gallery =
- galleries.find(it->first);
- if (pref_gallery == galleries.end() ||
- pref_gallery->second.IsBlackListedType() ||
- ContainsKey(permitted, it->first)) {
- to_remove.push_back(it);
- }
- }
- while (!to_remove.empty()) {
- scan_results->erase(to_remove.front());
- to_remove.pop_front();
- }
-}
-
-void MediaGalleriesScanResultDialogController::OnPreferencesInitialized() {
- // These may be NULL in tests.
- if (StorageMonitor::GetInstance())
- StorageMonitor::GetInstance()->AddObserver(this);
- if (preferences_) {
- preferences_->AddGalleryChangeObserver(this);
- UpdateScanResultsFromPreferences(preferences_, extension_,
- results_to_remove_, &scan_results_);
- }
-
- // TODO(vandebo): Remove the conditional after GTK is removed.
- if (!create_dialog_callback_.is_null())
- dialog_.reset(create_dialog_callback_.Run(this));
-}
-
-void MediaGalleriesScanResultDialogController::OnPreferenceUpdate(
- const std::string& extension_id) {
- if (extension_id == extension_->id()) {
- UpdateScanResultsFromPreferences(preferences_, extension_,
- results_to_remove_, &scan_results_);
- dialog_->UpdateResults();
- }
-}
-
-void MediaGalleriesScanResultDialogController::OnRemovableDeviceUpdate(
- const std::string device_id) {
- for (ScanResults::const_iterator it = scan_results_.begin();
- it != scan_results_.end();
- ++it) {
- if (it->second.pref_info.device_id == device_id) {
- dialog_->UpdateResults();
- return;
- }
- }
-}
-
-Profile* MediaGalleriesScanResultDialogController::GetProfile() const {
- return Profile::FromBrowserContext(web_contents_->GetBrowserContext());
-}
-
-void MediaGalleriesScanResultDialogController::OnRemovableStorageAttached(
- const StorageInfo& info) {
- OnRemovableDeviceUpdate(info.device_id());
-}
-
-void MediaGalleriesScanResultDialogController::OnRemovableStorageDetached(
- const StorageInfo& info) {
- OnRemovableDeviceUpdate(info.device_id());
-}
-
-void MediaGalleriesScanResultDialogController::OnPermissionAdded(
- MediaGalleriesPreferences* /*pref*/,
- const std::string& extension_id,
- MediaGalleryPrefId /*pref_id*/) {
- OnPreferenceUpdate(extension_id);
-}
-
-void MediaGalleriesScanResultDialogController::OnPermissionRemoved(
- MediaGalleriesPreferences* /*pref*/,
- const std::string& extension_id,
- MediaGalleryPrefId /*pref_id*/) {
- OnPreferenceUpdate(extension_id);
-}
-
-void MediaGalleriesScanResultDialogController::OnGalleryAdded(
- MediaGalleriesPreferences* /*prefs*/,
- MediaGalleryPrefId /*pref_id*/) {
- OnPreferenceUpdate(extension_->id());
-}
-
-void MediaGalleriesScanResultDialogController::OnGalleryRemoved(
- MediaGalleriesPreferences* /*prefs*/,
- MediaGalleryPrefId /*pref_id*/) {
- OnPreferenceUpdate(extension_->id());
-}
-
-void MediaGalleriesScanResultDialogController::OnGalleryInfoUpdated(
- MediaGalleriesPreferences* /*prefs*/,
- MediaGalleryPrefId /*pref_id*/) {
- OnPreferenceUpdate(extension_->id());
-}
-
-// MediaGalleriesScanResultDialog ---------------------------------------------
-
-MediaGalleriesScanResultDialog::~MediaGalleriesScanResultDialog() {}

Powered by Google App Engine
This is Rietveld 408576698