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