168513a70bcd92384395513322f1b801e7bf9c729Steve Block/* 268513a70bcd92384395513322f1b801e7bf9c729Steve Block * Copyright (C) 2010 Google Inc. All rights reserved. 368513a70bcd92384395513322f1b801e7bf9c729Steve Block * 468513a70bcd92384395513322f1b801e7bf9c729Steve Block * Redistribution and use in source and binary forms, with or without 568513a70bcd92384395513322f1b801e7bf9c729Steve Block * modification, are permitted provided that the following conditions are 668513a70bcd92384395513322f1b801e7bf9c729Steve Block * met: 768513a70bcd92384395513322f1b801e7bf9c729Steve Block * 868513a70bcd92384395513322f1b801e7bf9c729Steve Block * * Redistributions of source code must retain the above copyright 968513a70bcd92384395513322f1b801e7bf9c729Steve Block * notice, this list of conditions and the following disclaimer. 1068513a70bcd92384395513322f1b801e7bf9c729Steve Block * * Redistributions in binary form must reproduce the above 1168513a70bcd92384395513322f1b801e7bf9c729Steve Block * copyright notice, this list of conditions and the following disclaimer 1268513a70bcd92384395513322f1b801e7bf9c729Steve Block * in the documentation and/or other materials provided with the 1368513a70bcd92384395513322f1b801e7bf9c729Steve Block * distribution. 1468513a70bcd92384395513322f1b801e7bf9c729Steve Block * * Neither the name of Google Inc. nor the names of its 1568513a70bcd92384395513322f1b801e7bf9c729Steve Block * contributors may be used to endorse or promote products derived from 1668513a70bcd92384395513322f1b801e7bf9c729Steve Block * this software without specific prior written permission. 1768513a70bcd92384395513322f1b801e7bf9c729Steve Block * 1868513a70bcd92384395513322f1b801e7bf9c729Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1968513a70bcd92384395513322f1b801e7bf9c729Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2068513a70bcd92384395513322f1b801e7bf9c729Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2168513a70bcd92384395513322f1b801e7bf9c729Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2268513a70bcd92384395513322f1b801e7bf9c729Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2368513a70bcd92384395513322f1b801e7bf9c729Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2468513a70bcd92384395513322f1b801e7bf9c729Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2568513a70bcd92384395513322f1b801e7bf9c729Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2668513a70bcd92384395513322f1b801e7bf9c729Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2768513a70bcd92384395513322f1b801e7bf9c729Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2868513a70bcd92384395513322f1b801e7bf9c729Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2968513a70bcd92384395513322f1b801e7bf9c729Steve Block */ 3068513a70bcd92384395513322f1b801e7bf9c729Steve Block 3168513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "config.h" 3268513a70bcd92384395513322f1b801e7bf9c729Steve Block 3368513a70bcd92384395513322f1b801e7bf9c729Steve Block#if ENABLE(FILE_SYSTEM) 3468513a70bcd92384395513322f1b801e7bf9c729Steve Block 3568513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "JSDirectoryEntry.h" 3668513a70bcd92384395513322f1b801e7bf9c729Steve Block 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "ExceptionCode.h" 3868513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "JSDOMBinding.h" 3968513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "JSEntryCallback.h" 4068513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "JSErrorCallback.h" 412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "JSWebKitFlags.h" 4268513a70bcd92384395513322f1b801e7bf9c729Steve Block#include <wtf/Assertions.h> 4368513a70bcd92384395513322f1b801e7bf9c729Steve Block 4468513a70bcd92384395513322f1b801e7bf9c729Steve Blockusing namespace JSC; 4568513a70bcd92384395513322f1b801e7bf9c729Steve Block 4668513a70bcd92384395513322f1b801e7bf9c729Steve Blocknamespace WebCore { 4768513a70bcd92384395513322f1b801e7bf9c729Steve Block 4868513a70bcd92384395513322f1b801e7bf9c729Steve BlockJSValue JSDirectoryEntry::getFile(ExecState* exec) 4968513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 5068513a70bcd92384395513322f1b801e7bf9c729Steve Block DirectoryEntry* imp = static_cast<DirectoryEntry*>(impl()); 5168513a70bcd92384395513322f1b801e7bf9c729Steve Block const String& path = valueToStringWithUndefinedOrNullCheck(exec, exec->argument(0)); 5268513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->hadException()) 5368513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 5468513a70bcd92384395513322f1b801e7bf9c729Steve Block 5568513a70bcd92384395513322f1b801e7bf9c729Steve Block int argsCount = exec->argumentCount(); 5668513a70bcd92384395513322f1b801e7bf9c729Steve Block if (argsCount <= 1) { 5768513a70bcd92384395513322f1b801e7bf9c729Steve Block imp->getFile(path); 5868513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 5968513a70bcd92384395513322f1b801e7bf9c729Steve Block } 6068513a70bcd92384395513322f1b801e7bf9c729Steve Block 612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<WebKitFlags> flags; 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!exec->argument(1).isNull() && !exec->argument(1).isUndefined() && exec->argument(1).isObject() && !exec->argument(1).inherits(&JSWebKitFlags::s_info)) { 6368513a70bcd92384395513322f1b801e7bf9c729Steve Block JSObject* object = exec->argument(1).getObject(); 642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch flags = WebKitFlags::create(); 6568513a70bcd92384395513322f1b801e7bf9c729Steve Block JSValue jsCreate = object->get(exec, Identifier(exec, "create")); 6668513a70bcd92384395513322f1b801e7bf9c729Steve Block flags->setCreate(jsCreate.toBoolean(exec)); 6768513a70bcd92384395513322f1b801e7bf9c729Steve Block JSValue jsExclusive = object->get(exec, Identifier(exec, "exclusive")); 6868513a70bcd92384395513322f1b801e7bf9c729Steve Block flags->setExclusive(jsExclusive.toBoolean(exec)); 6968513a70bcd92384395513322f1b801e7bf9c729Steve Block } else 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch flags = toWebKitFlags(exec->argument(1)); 7168513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->hadException()) 7268513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 7368513a70bcd92384395513322f1b801e7bf9c729Steve Block RefPtr<EntryCallback> successCallback; 7468513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->argumentCount() > 2 && !exec->argument(2).isNull() && !exec->argument(2).isUndefined()) { 7568513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!exec->argument(2).isObject()) { 7668513a70bcd92384395513322f1b801e7bf9c729Steve Block setDOMException(exec, TYPE_MISMATCH_ERR); 7768513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 7868513a70bcd92384395513322f1b801e7bf9c729Steve Block } 7968513a70bcd92384395513322f1b801e7bf9c729Steve Block successCallback = JSEntryCallback::create(asObject(exec->argument(2)), globalObject()); 8068513a70bcd92384395513322f1b801e7bf9c729Steve Block } 8168513a70bcd92384395513322f1b801e7bf9c729Steve Block RefPtr<ErrorCallback> errorCallback; 8268513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->argumentCount() > 3 && !exec->argument(3).isNull() && !exec->argument(3).isUndefined()) { 8368513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!exec->argument(3).isObject()) { 8468513a70bcd92384395513322f1b801e7bf9c729Steve Block setDOMException(exec, TYPE_MISMATCH_ERR); 8568513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 8668513a70bcd92384395513322f1b801e7bf9c729Steve Block } 8768513a70bcd92384395513322f1b801e7bf9c729Steve Block errorCallback = JSErrorCallback::create(asObject(exec->argument(3)), globalObject()); 8868513a70bcd92384395513322f1b801e7bf9c729Steve Block } 8968513a70bcd92384395513322f1b801e7bf9c729Steve Block 9068513a70bcd92384395513322f1b801e7bf9c729Steve Block imp->getFile(path, flags, successCallback, errorCallback); 9168513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 9268513a70bcd92384395513322f1b801e7bf9c729Steve Block} 9368513a70bcd92384395513322f1b801e7bf9c729Steve Block 9468513a70bcd92384395513322f1b801e7bf9c729Steve BlockJSValue JSDirectoryEntry::getDirectory(ExecState* exec) 9568513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 9668513a70bcd92384395513322f1b801e7bf9c729Steve Block DirectoryEntry* imp = static_cast<DirectoryEntry*>(impl()); 9768513a70bcd92384395513322f1b801e7bf9c729Steve Block const String& path = valueToStringWithUndefinedOrNullCheck(exec, exec->argument(0)); 9868513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->hadException()) 9968513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 10068513a70bcd92384395513322f1b801e7bf9c729Steve Block 10168513a70bcd92384395513322f1b801e7bf9c729Steve Block int argsCount = exec->argumentCount(); 10268513a70bcd92384395513322f1b801e7bf9c729Steve Block if (argsCount <= 1) { 10368513a70bcd92384395513322f1b801e7bf9c729Steve Block imp->getDirectory(path); 10468513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 10568513a70bcd92384395513322f1b801e7bf9c729Steve Block } 10668513a70bcd92384395513322f1b801e7bf9c729Steve Block 1072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<WebKitFlags> flags; 1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!exec->argument(1).isNull() && !exec->argument(1).isUndefined() && exec->argument(1).isObject() && !exec->argument(1).inherits(&JSWebKitFlags::s_info)) { 10968513a70bcd92384395513322f1b801e7bf9c729Steve Block JSObject* object = exec->argument(1).getObject(); 1102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch flags = WebKitFlags::create(); 11168513a70bcd92384395513322f1b801e7bf9c729Steve Block JSValue jsCreate = object->get(exec, Identifier(exec, "create")); 11268513a70bcd92384395513322f1b801e7bf9c729Steve Block flags->setCreate(jsCreate.toBoolean(exec)); 11368513a70bcd92384395513322f1b801e7bf9c729Steve Block JSValue jsExclusive = object->get(exec, Identifier(exec, "exclusive")); 11468513a70bcd92384395513322f1b801e7bf9c729Steve Block flags->setExclusive(jsExclusive.toBoolean(exec)); 11568513a70bcd92384395513322f1b801e7bf9c729Steve Block } else 1162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch flags = toWebKitFlags(exec->argument(1)); 11768513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->hadException()) 11868513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 11968513a70bcd92384395513322f1b801e7bf9c729Steve Block RefPtr<EntryCallback> successCallback; 12068513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->argumentCount() > 2 && !exec->argument(2).isNull() && !exec->argument(2).isUndefined()) { 12168513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!exec->argument(2).isObject()) { 12268513a70bcd92384395513322f1b801e7bf9c729Steve Block setDOMException(exec, TYPE_MISMATCH_ERR); 12368513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 12468513a70bcd92384395513322f1b801e7bf9c729Steve Block } 12568513a70bcd92384395513322f1b801e7bf9c729Steve Block successCallback = JSEntryCallback::create(asObject(exec->argument(2)), globalObject()); 12668513a70bcd92384395513322f1b801e7bf9c729Steve Block } 12768513a70bcd92384395513322f1b801e7bf9c729Steve Block RefPtr<ErrorCallback> errorCallback; 12868513a70bcd92384395513322f1b801e7bf9c729Steve Block if (exec->argumentCount() > 3 && !exec->argument(3).isNull() && !exec->argument(3).isUndefined()) { 12968513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!exec->argument(3).isObject()) { 13068513a70bcd92384395513322f1b801e7bf9c729Steve Block setDOMException(exec, TYPE_MISMATCH_ERR); 13168513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 13268513a70bcd92384395513322f1b801e7bf9c729Steve Block } 13368513a70bcd92384395513322f1b801e7bf9c729Steve Block errorCallback = JSErrorCallback::create(asObject(exec->argument(3)), globalObject()); 13468513a70bcd92384395513322f1b801e7bf9c729Steve Block } 13568513a70bcd92384395513322f1b801e7bf9c729Steve Block 13668513a70bcd92384395513322f1b801e7bf9c729Steve Block imp->getDirectory(path, flags, successCallback, errorCallback); 13768513a70bcd92384395513322f1b801e7bf9c729Steve Block return jsUndefined(); 13868513a70bcd92384395513322f1b801e7bf9c729Steve Block} 13968513a70bcd92384395513322f1b801e7bf9c729Steve Block 14068513a70bcd92384395513322f1b801e7bf9c729Steve Block} // namespace WebCore 14168513a70bcd92384395513322f1b801e7bf9c729Steve Block 14268513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif // ENABLE(FILE_SYSTEM) 143