media_galleries_dialog_controller.h revision f2477e01787aa58f445919b809d89e252beef54f
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <list> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/media_galleries_preferences.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/storage_monitor/removable_storage_observer.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/native_widget_types.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/shell_dialogs/select_file_dialog.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebContents; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Extension; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace ui { 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class MenuModel; 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class GalleryContextMenuModel; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialogController; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class Profile; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The view. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialog { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MediaGalleriesDialog(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Tell the dialog to update its display list of galleries. 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void UpdateGalleries() = 0; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Constructs a platform-specific dialog owned and controlled by |controller|. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static MediaGalleriesDialog* Create( 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesDialogController* controller); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The controller is responsible for handling the logic of the dialog and 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// interfacing with the model (i.e., MediaGalleriesPreferences). It shows 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the dialog and owns itself. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaGalleriesDialogController 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public ui::SelectFileDialog::Listener, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public RemovableStorageObserver, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public MediaGalleriesPreferences::GalleryChangeObserver { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct GalleryPermission { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GalleryPermission(const MediaGalleryPrefInfo& pref_info, bool allowed) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : pref_info(pref_info), allowed(allowed) {} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GalleryPermission() {} 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefInfo pref_info; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allowed; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef std::vector<GalleryPermission> GalleryPermissionsVector; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The constructor creates a dialog controller which owns itself. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesDialogController(content::WebContents* web_contents, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension& extension, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& on_finish); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The title of the dialog view. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 GetHeader() const; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Explanatory text directly below the title. 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 GetSubtext() const; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Header for unattached devices part of the dialog. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 GetUnattachedLocationsHeader() const; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initial state of whether the dialog's confirmation button will be enabled. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasPermittedGalleries() const; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the set of permissions to attached galleries. 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual GalleryPermissionsVector AttachedPermissions() const; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Get the set of permissions to unattached galleries. 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual GalleryPermissionsVector UnattachedPermissions() const; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the add-folder button in the dialog is clicked. 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnAddFolderClicked(); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A checkbox beside a gallery permission was checked. The full set 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // of gallery permissions checkbox settings is sent on every checkbox toggle. 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidToggleGalleryId(MediaGalleryPrefId pref_id, 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enabled); 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void DidToggleNewGallery(const MediaGalleryPrefInfo& gallery, 981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool enabled); 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // The forget command in the context menu was selected. 1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void DidForgetGallery(MediaGalleryPrefId pref_id); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The dialog is being deleted. 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DialogFinished(bool accepted); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual content::WebContents* web_contents(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::MenuModel* GetContextMenuModel(MediaGalleryPrefId id); 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For use with tests. 112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch explicit MediaGalleriesDialogController( 113558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const extensions::Extension& extension); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MediaGalleriesDialogController(); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This type keeps track of media galleries already known to the prefs system. 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef std::map<MediaGalleryPrefId, GalleryPermission> 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) KnownGalleryPermissions; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Bottom half of constructor -- called when |preferences_| is initialized. 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnPreferencesInitialized(); 124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SelectFileDialog::Listener implementation: 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FileSelected(const base::FilePath& path, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void* params) OVERRIDE; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // RemovableStorageObserver implementation. 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to keep dialog in sync with removable device status. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRemovableStorageAttached(const StorageInfo& info) OVERRIDE; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRemovableStorageDetached(const StorageInfo& info) OVERRIDE; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // MediaGalleriesPreferences::GalleryChangeObserver implementations. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to keep the dialog in sync when the preferences change. 137d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnPermissionAdded(MediaGalleriesPreferences* pref, 138d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& extension_id, 139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE; 140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnPermissionRemoved(MediaGalleriesPreferences* pref, 141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& extension_id, 142d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE; 143d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnGalleryAdded(MediaGalleriesPreferences* pref, 144d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE; 145d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnGalleryRemoved(MediaGalleriesPreferences* pref, 146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE; 147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void OnGalleryInfoUpdated(MediaGalleriesPreferences* pref, 148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) MediaGalleryPrefId pref_id) OVERRIDE; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populates |known_galleries_| from |preferences_|. Subsequent calls merge 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // into |known_galleries_| and do not change permissions for user toggled 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // galleries. 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void InitializePermissions(); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Saves state of |known_galleries_| and |new_galleries_| to model. 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SavePermissions(); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the model and view when |preferences_| changes. Some of the 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // possible changes includes a gallery getting blacklisted, or a new 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // auto detected gallery becoming available. 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateGalleriesOnPreferencesEvent(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the model and view when a device is attached or detached. 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateGalleriesOnDeviceEvent(const std::string& device_id); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Fill |permissions| with a sorted list of either attached or unattached 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // gallery permissions. 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FillPermissions(bool attached, 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GalleryPermissionsVector* permissions) const; 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* GetProfile(); 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The web contents from which the request originated. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents_; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is just a reference, but it's assumed that it won't become invalid 177558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // while the dialog is showing. 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::Extension* extension_; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This map excludes those galleries which have been blacklisted; it only 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // counts active known galleries. 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KnownGalleryPermissions known_galleries_; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Galleries in |known_galleries_| that the user have toggled. 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleryPrefIdSet toggled_galleries_; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Map of new galleries the user added, but have not saved. This list should 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // never overlap with |known_galleries_|. 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GalleryPermissionsVector new_galleries_; 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Callback to run when the dialog closes. 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure on_finish_; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The model that tracks galleries and extensions' permissions. 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is the authoritative source for gallery information. 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaGalleriesPreferences* preferences_; 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The view that's showing. 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<MediaGalleriesDialog> dialog_; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<ui::SelectFileDialog> select_folder_dialog_; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<ui::MenuModel> context_menu_model_; 2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<GalleryContextMenuModel> gallery_menu_model_; 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogController); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_DIALOG_CONTROLLER_H_ 210