// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "modules/filesystem/DevToolsHostFileSystem.h"

#include "core/dom/Document.h"
#include "core/frame/LocalFrame.h"
#include "core/inspector/DevToolsHost.h"
#include "core/page/Page.h"
#include "modules/filesystem/DOMFileSystem.h"
#include "platform/json/JSONValues.h"

namespace blink {

DOMFileSystem* DevToolsHostFileSystem::isolatedFileSystem(
    DevToolsHost& host,
    const String& file_system_name,
    const String& root_url) {
  ExecutionContext* context = host.FrontendFrame()->GetDocument();
  return DOMFileSystem::Create(context, file_system_name,
                               kFileSystemTypeIsolated,
                               KURL(kParsedURLString, root_url));
}

void DevToolsHostFileSystem::upgradeDraggedFileSystemPermissions(
    DevToolsHost& host,
    DOMFileSystem* dom_file_system) {
  std::unique_ptr<JSONObject> message = JSONObject::Create();
  message->SetInteger("id", 0);
  message->SetString("method", "upgradeDraggedFileSystemPermissions");
  std::unique_ptr<JSONArray> params = JSONArray::Create();
  params->PushString(dom_file_system->RootURL().GetString());
  message->SetArray("params", std::move(params));
  host.sendMessageToEmbedder(message->ToJSONString());
}

}  // namespace blink
