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..dbf957896941c090aacef4f06734d6f5d3b688b8 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,19 @@ |
#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 |
+using content::WebContents; |
+ |
namespace extensions { |
namespace { |
@@ -47,14 +51,20 @@ bool MediaGalleriesGetMediaFileSystemsFunction::RunImpl() { |
interactive = *params->details->interactive; |
if (interactive == "yes") { |
- // TODO(estade): implement. |
+ ShowDialog(); |
+ return true; |
} else if (interactive == "if_needed") { |
vandebo (ex-Chrome)
2012/08/08 19:24:21
nit: fall through to no for now.
|
// 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(); |
@@ -83,10 +93,39 @@ bool MediaGalleriesGetMediaFileSystemsFunction::RunImpl() { |
// TODO(vandebo) Handle write permission. |
} |
- SetResult(list); |
- return true; |
+ SendResponse(list); |
} |
+void MediaGalleriesGetMediaFileSystemsFunction::ShowDialog() { |
+ AddRef(); // Balanced in MediaGalleriesDialogFinished. |
+ |
+ 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. |
+ MediaGalleriesDialogFinished(); |
+ return; |
+ } |
+ |
+#if defined(TOOLKIT_GTK) |
+ // Controller will delete itself. |
+ new chrome::MediaGalleriesDialogController( |
+ tab_contents, *GetExtension(), this); |
+#else |
+ // TODO(estade): implement dialog on Views and Cocoa. |
+ MediaGalleriesDialogFinished(); |
+#endif |
+} |
+ |
+void MediaGalleriesGetMediaFileSystemsFunction::MediaGalleriesDialogFinished() { |
+ ReturnGalleries(); |
+ Release(); |
+} |
+ |
+// MediaGalleriesAssembleMediaFileFunction ------------------------------------- |
+ |
MediaGalleriesAssembleMediaFileFunction:: |
~MediaGalleriesAssembleMediaFileFunction() {} |