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/sync_file_system_custom_bindings.h"
6
7#include <string>
8
9#include "extensions/renderer/script_context.h"
10#include "storage/common/fileapi/file_system_util.h"
11#include "third_party/WebKit/public/web/WebDOMFileSystem.h"
12#include "third_party/WebKit/public/web/WebLocalFrame.h"
13#include "v8/include/v8.h"
14
15namespace extensions {
16
17SyncFileSystemCustomBindings::SyncFileSystemCustomBindings(
18    ScriptContext* context)
19    : ObjectBackedNativeHandler(context) {
20  RouteFunction(
21      "GetSyncFileSystemObject",
22      base::Bind(&SyncFileSystemCustomBindings::GetSyncFileSystemObject,
23                 base::Unretained(this)));
24}
25
26void SyncFileSystemCustomBindings::GetSyncFileSystemObject(
27    const v8::FunctionCallbackInfo<v8::Value>& args) {
28  if (args.Length() != 2) {
29    NOTREACHED();
30    return;
31  }
32  if (!args[0]->IsString()) {
33    NOTREACHED();
34    return;
35  }
36  if (!args[1]->IsString()) {
37    NOTREACHED();
38    return;
39  }
40
41  std::string name(*v8::String::Utf8Value(args[0]));
42  if (name.empty()) {
43    NOTREACHED();
44    return;
45  }
46  std::string root_url(*v8::String::Utf8Value(args[1]));
47  if (root_url.empty()) {
48    NOTREACHED();
49    return;
50  }
51
52  blink::WebLocalFrame* webframe =
53      blink::WebLocalFrame::frameForContext(context()->v8_context());
54  args.GetReturnValue().Set(
55      blink::WebDOMFileSystem::create(webframe,
56                                      blink::WebFileSystemTypeExternal,
57                                      blink::WebString::fromUTF8(name),
58                                      GURL(root_url))
59          .toV8Value(args.Holder(), args.GetIsolate()));
60}
61
62}  // namespace extensions
63