| Index: chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
|
| diff --git a/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc b/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
|
| index f9ba21422adf22cac30a6079fc36d64d0d17b1d8..8fffb29ca2f75fac619bbd9582dfbebfbb871cb9 100644
|
| --- a/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
|
| +++ b/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
|
| @@ -12,15 +12,23 @@
|
| #include "base/platform_file.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/media_gallery/media_file_system_registry.h"
|
| +#include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| #include "chrome/common/extensions/api/experimental_media_galleries.h"
|
| #include "content/public/browser/child_process_security_policy.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| +#include "content/public/browser/web_contents.h"
|
|
|
| #if defined(OS_WIN)
|
| #include "base/sys_string_conversions.h"
|
| #endif
|
|
|
| +#if defined(TOOLKIT_GTK)
|
| +#include "chrome/browser/media_gallery/media_galleries_dialog_controller.h"
|
| +#endif
|
| +
|
| +using content::WebContents;
|
| +
|
| namespace extensions {
|
|
|
| namespace {
|
| @@ -47,14 +55,20 @@ bool MediaGalleriesGetMediaFileSystemsFunction::RunImpl() {
|
| interactive = *params->details->interactive;
|
|
|
| if (interactive == "yes") {
|
| - // TODO(estade): implement.
|
| + ShowDialog();
|
| + return true;
|
| } else if (interactive == "if_needed") {
|
| // TODO(estade): implement.
|
| - } else if (interactive != "no") {
|
| - error_ = kInvalidInteractive;
|
| - return false;
|
| + } else if (interactive == "no") {
|
| + ReturnGalleries();
|
| + return true;
|
| }
|
|
|
| + error_ = kInvalidInteractive;
|
| + return false;
|
| +}
|
| +
|
| +void MediaGalleriesGetMediaFileSystemsFunction::ReturnGalleries() {
|
| const content::RenderProcessHost* rph = render_view_host()->GetProcess();
|
| chrome::MediaFileSystemRegistry* media_fs_registry =
|
| MediaFileSystemRegistry::GetInstance();
|
| @@ -84,9 +98,34 @@ bool MediaGalleriesGetMediaFileSystemsFunction::RunImpl() {
|
| }
|
|
|
| SetResult(list);
|
| - return true;
|
| + SendResponse(true);
|
| }
|
|
|
| +void MediaGalleriesGetMediaFileSystemsFunction::ShowDialog() {
|
| + WebContents* contents = WebContents::FromRenderViewHost(render_view_host());
|
| + TabContents* tab_contents =
|
| + contents ? TabContents::FromWebContents(contents) : NULL;
|
| + if (!tab_contents) {
|
| + // TODO(estade): for now it just gives up, but it might be nice to first
|
| + // attempt to find the active window for this extension.
|
| + ReturnGalleries();
|
| + return;
|
| + }
|
| +
|
| +#if defined(TOOLKIT_GTK)
|
| + // Controller will delete itself.
|
| + new chrome::MediaGalleriesDialogController(
|
| + tab_contents, *GetExtension(),
|
| + base::Bind(&MediaGalleriesGetMediaFileSystemsFunction::ReturnGalleries,
|
| + this));
|
| +#else
|
| + // TODO(estade): implement dialog on Views and Cocoa.
|
| + ReturnGalleries();
|
| +#endif
|
| +}
|
| +
|
| +// MediaGalleriesAssembleMediaFileFunction -------------------------------------
|
| +
|
| MediaGalleriesAssembleMediaFileFunction::
|
| ~MediaGalleriesAssembleMediaFileFunction() {}
|
|
|
|
|