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