media_galleries_custom_bindings.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/extensions/media_galleries_custom_bindings.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension_constants.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDOMFileSystem.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDocument.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/fileapi/file_system_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// FileSystemObject GetMediaFileSystem(string file_system_url): construct
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// a file system object from a file system url.
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void GetMediaFileSystemObject(const v8::FunctionCallbackInfo<v8::Value>& args) {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CHECK_EQ(1, args.Length());
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CHECK(args[0]->IsString());
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string fs_mount(*v8::String::Utf8Value(args[0]));
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  CHECK(!fs_mount.empty());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  blink::WebLocalFrame* webframe =
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      blink::WebLocalFrame::frameForCurrentContext();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL origin = GURL(webframe->document().securityOrigin().toString());
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string fs_name =
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      fileapi::GetFileSystemName(origin, fileapi::kFileSystemTypeExternal);
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  fs_name.append("_");
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  fs_name.append(fs_mount);
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const GURL root_url(
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      fileapi::GetExternalFileSystemRootURIString(origin, fs_mount));
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  args.GetReturnValue().Set(
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      blink::WebDOMFileSystem::create(webframe,
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                      blink::WebFileSystemTypeExternal,
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                      blink::WebString::fromUTF8(fs_name),
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                      root_url).toV8Value());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MediaGalleriesCustomBindings::MediaGalleriesCustomBindings(
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Dispatcher* dispatcher, ChromeV8Context* context)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : ChromeV8Extension(dispatcher, context) {
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RouteFunction("GetMediaFileSystemObject",
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::Bind(&GetMediaFileSystemObject));
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
55