12daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/* 22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved. 32daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 42daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Redistribution and use in source and binary forms, with or without 52daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * modification, are permitted provided that the following conditions are 62daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * met: 72daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 82daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * * Redistributions of source code must retain the above copyright 92daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * notice, this list of conditions and the following disclaimer. 102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * * Redistributions in binary form must reproduce the above 112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * in the documentation and/or other materials provided with the 132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * distribution. 142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * * Neither the name of Google Inc. nor the names of its 152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * contributors may be used to endorse or promote products derived from 162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * this software without specific prior written permission. 172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */ 302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "config.h" 322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "StorageInfo.h" 332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(QUOTA) 352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "DOMCoreException.h" 372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "Document.h" 382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "ScriptExecutionContext.h" 392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "StorageInfoErrorCallback.h" 402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "StorageInfoQuotaCallback.h" 412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "StorageInfoUsageCallback.h" 422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebFrameClient.h" 432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebFrameImpl.h" 442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebStorageQuotaCallbacksImpl.h" 452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebStorageQuotaType.h" 462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochusing namespace WebKit; 482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace WebCore { 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace { 522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid fireStorageInfoErrorCallback(PassRefPtr<StorageInfoErrorCallback> errorCallback, ExceptionCode ec) 532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(errorCallback); 552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ExceptionCodeDescription description; 562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch getExceptionCodeDescription(ec, description); 572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch errorCallback->handleEvent(DOMCoreException::create(description).get()); 582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid StorageInfo::queryUsageAndQuota(ScriptExecutionContext* context, int storageType, PassRefPtr<StorageInfoUsageCallback> successCallback, PassRefPtr<StorageInfoErrorCallback> errorCallback) 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(context); 642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (storageType != WebStorageQuotaTypeTemporary && storageType != WebStorageQuotaTypePersistent) { 652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Unknown storage type is requested. 662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch fireStorageInfoErrorCallback(errorCallback, NOT_SUPPORTED_ERR); 672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (context->isDocument()) { 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Document* document = static_cast<Document*>(context); 712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); 722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch webFrame->client()->queryStorageUsageAndQuota(webFrame, static_cast<WebStorageQuotaType>(storageType), new WebStorageQuotaCallbacksImpl(successCallback, errorCallback)); 732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else if (errorCallback) { 742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: calling this on worker is not yet supported. 752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch fireStorageInfoErrorCallback(errorCallback, NOT_SUPPORTED_ERR); 762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid StorageInfo::requestQuota(ScriptExecutionContext* context, int storageType, unsigned long long newQuotaInBytes, PassRefPtr<StorageInfoQuotaCallback> successCallback, PassRefPtr<StorageInfoErrorCallback> errorCallback) 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(context); 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (storageType != WebStorageQuotaTypeTemporary && storageType != WebStorageQuotaTypePersistent) { 832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Unknown storage type is requested. 842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch fireStorageInfoErrorCallback(errorCallback, NOT_SUPPORTED_ERR); 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (context->isDocument()) { 882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Document* document = static_cast<Document*>(context); 892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); 902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch webFrame->client()->requestStorageQuota(webFrame, static_cast<WebStorageQuotaType>(storageType), newQuotaInBytes, new WebStorageQuotaCallbacksImpl(successCallback, errorCallback)); 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else if (errorCallback) { 922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: calling this on worker is not yet supported. 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch fireStorageInfoErrorCallback(errorCallback, NOT_SUPPORTED_ERR); 942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} // namespace WebCore 982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif // ENABLE(QUOTA) 100