Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/renderer/extensions/media_galleries_custom_bindings.h"
      6 
      7 #include <string>
      8 
      9 #include "extensions/renderer/script_context.h"
     10 #include "third_party/WebKit/public/web/WebDOMFileSystem.h"
     11 #include "third_party/WebKit/public/web/WebDocument.h"
     12 #include "third_party/WebKit/public/web/WebLocalFrame.h"
     13 #include "v8/include/v8.h"
     14 #include "webkit/common/fileapi/file_system_util.h"
     15 
     16 namespace extensions {
     17 
     18 namespace {
     19 
     20 // FileSystemObject GetMediaFileSystem(string file_system_url): construct
     21 // a file system object from a file system url.
     22 void GetMediaFileSystemObject(const v8::FunctionCallbackInfo<v8::Value>& args) {
     23   CHECK_EQ(1, args.Length());
     24   CHECK(args[0]->IsString());
     25 
     26   std::string fs_mount(*v8::String::Utf8Value(args[0]));
     27   CHECK(!fs_mount.empty());
     28 
     29   blink::WebLocalFrame* webframe =
     30       blink::WebLocalFrame::frameForCurrentContext();
     31   const GURL origin = GURL(webframe->document().securityOrigin().toString());
     32   std::string fs_name =
     33       fileapi::GetFileSystemName(origin, fileapi::kFileSystemTypeExternal);
     34   fs_name.append("_");
     35   fs_name.append(fs_mount);
     36   const GURL root_url(
     37       fileapi::GetExternalFileSystemRootURIString(origin, fs_mount));
     38   args.GetReturnValue().Set(
     39       blink::WebDOMFileSystem::create(webframe,
     40                                       blink::WebFileSystemTypeExternal,
     41                                       blink::WebString::fromUTF8(fs_name),
     42                                       root_url)
     43           .toV8Value(args.Holder(), args.GetIsolate()));
     44 }
     45 
     46 }  // namespace
     47 
     48 MediaGalleriesCustomBindings::MediaGalleriesCustomBindings(
     49     ScriptContext* context)
     50     : ObjectBackedNativeHandler(context) {
     51   RouteFunction("GetMediaFileSystemObject",
     52                 base::Bind(&GetMediaFileSystemObject));
     53 }
     54 
     55 }  // namespace extensions
     56