Index: chrome/browser/media_galleries/media_galleries_scan_result_controller.cc |
diff --git a/chrome/browser/media_galleries/media_galleries_scan_result_controller.cc b/chrome/browser/media_galleries/media_galleries_scan_result_controller.cc |
deleted file mode 100644 |
index 263d1e7e162813eedd472bb7728c95cd1cd06ff9..0000000000000000000000000000000000000000 |
--- a/chrome/browser/media_galleries/media_galleries_scan_result_controller.cc |
+++ /dev/null |
@@ -1,387 +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_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 "chrome/grit/generated_resources.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 "ui/base/l10n/l10n_util.h" |
- |
-using storage_monitor::StorageInfo; |
-using storage_monitor::StorageMonitor; |
- |
-namespace { |
- |
-// Comparator for sorting Entries -- more files first and then sorts by |
-// absolute path. |
-bool ScanResultsComparator( |
- const MediaGalleriesDialogController::Entry& a, |
- const MediaGalleriesDialogController::Entry& 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 MediaGalleriesScanResultController::ScanResultCountForExtension( |
- MediaGalleriesPreferences* preferences, |
- const extensions::Extension* extension) { |
- ScanResults scan_results; |
- UpdateScanResultsFromPreferences(preferences, extension, |
- MediaGalleryPrefIdSet(), &scan_results); |
- return scan_results.size(); |
-} |
- |
-MediaGalleriesScanResultController::MediaGalleriesScanResultController( |
- content::WebContents* web_contents, |
- const extensions::Extension& extension, |
- const base::Closure& on_finish) |
- : web_contents_(web_contents), |
- extension_(&extension), |
- on_finish_(on_finish), |
- create_dialog_callback_(base::Bind(&MediaGalleriesDialog::Create)) { |
- 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( |
- &MediaGalleriesScanResultController::OnPreferencesInitialized, |
- base::Unretained(this))); |
- |
- // Unretained is safe because |this| owns |context_menu_|. |
- context_menu_.reset(new MediaGalleryContextMenu(base::Bind( |
- &MediaGalleriesScanResultController::DidForgetEntry, |
- base::Unretained(this)))); |
-} |
- |
-MediaGalleriesScanResultController::MediaGalleriesScanResultController( |
- 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(); |
-} |
- |
-MediaGalleriesScanResultController::~MediaGalleriesScanResultController() { |
- // |preferences_| may be NULL in tests. |
- if (preferences_) |
- preferences_->RemoveGalleryChangeObserver(this); |
- if (StorageMonitor::GetInstance()) |
- StorageMonitor::GetInstance()->RemoveObserver(this); |
-} |
- |
-base::string16 MediaGalleriesScanResultController::GetHeader() const { |
- return l10n_util::GetStringFUTF16( |
- IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_HEADER, |
- base::UTF8ToUTF16(extension_->name())); |
-} |
- |
-base::string16 MediaGalleriesScanResultController::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, ©_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())); |
-} |
- |
-bool MediaGalleriesScanResultController::IsAcceptAllowed() const { |
- return true; |
-} |
- |
-bool MediaGalleriesScanResultController::ShouldShowFolderViewer( |
- const Entry& entry) const { |
- return entry.pref_info.IsGalleryAvailable(); |
-} |
- |
-std::vector<base::string16> |
-MediaGalleriesScanResultController::GetSectionHeaders() const { |
- std::vector<base::string16> result; |
- result.push_back(base::string16()); |
- return result; |
-} |
- |
-MediaGalleriesDialogController::Entries |
-MediaGalleriesScanResultController::GetSectionEntries( |
- size_t index) const { |
- DCHECK_EQ(0U, index); |
- Entries 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; |
-} |
- |
-base::string16 |
-MediaGalleriesScanResultController::GetAuxiliaryButtonText() const { |
- return base::string16(); |
-} |
- |
-void MediaGalleriesScanResultController::DidClickAuxiliaryButton() { |
- NOTREACHED(); |
-} |
- |
-void MediaGalleriesScanResultController::DidToggleEntry( |
- MediaGalleryPrefId pref_id, bool selected) { |
- DCHECK(ContainsKey(scan_results_, pref_id)); |
- ScanResults::iterator entry = scan_results_.find(pref_id); |
- entry->second.selected = selected; |
-} |
- |
-void MediaGalleriesScanResultController::DidClickOpenFolderViewer( |
- MediaGalleryPrefId pref_id) { |
- 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(), |
- platform_util::OPEN_FOLDER, |
- platform_util::OpenOperationCallback()); |
-} |
- |
-void MediaGalleriesScanResultController::DidForgetEntry( |
- 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_->UpdateGalleries(); |
-} |
- |
-base::string16 MediaGalleriesScanResultController::GetAcceptButtonText() const { |
- return l10n_util::GetStringUTF16( |
- IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_CONFIRM); |
-} |
- |
-void MediaGalleriesScanResultController::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; |
-} |
- |
-ui::MenuModel* MediaGalleriesScanResultController::GetContextMenu( |
- MediaGalleryPrefId id) { |
- context_menu_->set_pref_id(id); |
- return context_menu_.get(); |
-} |
- |
-content::WebContents* MediaGalleriesScanResultController::WebContents() { |
- return web_contents_; |
-} |
- |
-// static |
-void MediaGalleriesScanResultController::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] = Entry(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 MediaGalleriesScanResultController::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_); |
- } |
- |
- dialog_.reset(create_dialog_callback_.Run(this)); |
-} |
- |
-void MediaGalleriesScanResultController::OnPreferenceUpdate( |
- const std::string& extension_id) { |
- if (extension_id == extension_->id()) { |
- UpdateScanResultsFromPreferences(preferences_, extension_, |
- results_to_remove_, &scan_results_); |
- dialog_->UpdateGalleries(); |
- } |
-} |
- |
-void MediaGalleriesScanResultController::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_->UpdateGalleries(); |
- return; |
- } |
- } |
-} |
- |
-Profile* MediaGalleriesScanResultController::GetProfile() const { |
- return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
-} |
- |
-void MediaGalleriesScanResultController::OnRemovableStorageAttached( |
- const StorageInfo& info) { |
- OnRemovableDeviceUpdate(info.device_id()); |
-} |
- |
-void MediaGalleriesScanResultController::OnRemovableStorageDetached( |
- const StorageInfo& info) { |
- OnRemovableDeviceUpdate(info.device_id()); |
-} |
- |
-void MediaGalleriesScanResultController::OnPermissionAdded( |
- MediaGalleriesPreferences* /*pref*/, |
- const std::string& extension_id, |
- MediaGalleryPrefId /*pref_id*/) { |
- OnPreferenceUpdate(extension_id); |
-} |
- |
-void MediaGalleriesScanResultController::OnPermissionRemoved( |
- MediaGalleriesPreferences* /*pref*/, |
- const std::string& extension_id, |
- MediaGalleryPrefId /*pref_id*/) { |
- OnPreferenceUpdate(extension_id); |
-} |
- |
-void MediaGalleriesScanResultController::OnGalleryAdded( |
- MediaGalleriesPreferences* /*prefs*/, |
- MediaGalleryPrefId /*pref_id*/) { |
- OnPreferenceUpdate(extension_->id()); |
-} |
- |
-void MediaGalleriesScanResultController::OnGalleryRemoved( |
- MediaGalleriesPreferences* /*prefs*/, |
- MediaGalleryPrefId /*pref_id*/) { |
- OnPreferenceUpdate(extension_->id()); |
-} |
- |
-void MediaGalleriesScanResultController::OnGalleryInfoUpdated( |
- MediaGalleriesPreferences* /*prefs*/, |
- MediaGalleryPrefId /*pref_id*/) { |
- OnPreferenceUpdate(extension_->id()); |
-} |