15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Samsung Electronics. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * its contributors may be used to endorse or promote products derived 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * from this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorDOMStorageAgent.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/InspectorFrontend.h" 35591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "core/dom/DOMException.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorPageAgent.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorState.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InstrumentingAgents.h" 4176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/frame/LocalDOMWindow.h" 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/storage/Storage.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/storage/StorageNamespace.h" 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/JSONValues.h" 4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace DOMStorageAgentState { 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const char domStorageAgentEnabled[] = "domStorageAgentEnabled"; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static bool hadException(ExceptionState& exceptionState, ErrorString* errorString) 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 5751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!exceptionState.hadException()) 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 591fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch 6051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) switch (exceptionState.code()) { 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case SecurityError: 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Security error"; 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) default: 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Unknown DOM storage error"; 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)InspectorDOMStorageAgent::InspectorDOMStorageAgent(InspectorPageAgent* pageAgent) 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) : InspectorBaseAgent<InspectorDOMStorageAgent>("DOMStorage") 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_pageAgent(pageAgent) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_frontend(0) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InspectorDOMStorageAgent::~InspectorDOMStorageAgent() 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 81c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void InspectorDOMStorageAgent::trace(Visitor* visitor) 82c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) visitor->trace(m_pageAgent); 84c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) InspectorBaseAgent::trace(visitor); 85c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 86c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorDOMStorageAgent::setFrontend(InspectorFrontend* frontend) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 899e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_frontend = frontend->domstorage(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorDOMStorageAgent::clearFrontend() 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frontend = 0; 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) disable(0); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void InspectorDOMStorageAgent::restore() 99f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 100f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (isEnabled()) 101f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) enable(0); 102f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 103f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool InspectorDOMStorageAgent::isEnabled() const 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_state->getBoolean(DOMStorageAgentState::domStorageAgentEnabled); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorDOMStorageAgent::enable(ErrorString*) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_state->setBoolean(DOMStorageAgentState::domStorageAgentEnabled, true); 112591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_instrumentingAgents->setInspectorDOMStorageAgent(this); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorDOMStorageAgent::disable(ErrorString*) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 117591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_instrumentingAgents->setInspectorDOMStorageAgent(0); 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_state->setBoolean(DOMStorageAgentState::domStorageAgentEnabled, false); 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 121591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid InspectorDOMStorageAgent::getDOMStorageItems(ErrorString* errorString, const RefPtr<JSONObject>& storageId, RefPtr<TypeBuilder::Array<TypeBuilder::Array<String> > >& items) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame; 12409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtrWillBeRawPtr<StorageArea> storageArea = findStorageArea(errorString, storageId, frame); 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!storageArea) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RefPtr<TypeBuilder::Array<TypeBuilder::Array<String> > > storageItems = TypeBuilder::Array<TypeBuilder::Array<String> >::create(); 129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 13051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 13151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (unsigned i = 0; i < storageArea->length(exceptionState, frame); ++i) { 13251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) String name(storageArea->key(i, exceptionState, frame)); 13351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (hadException(exceptionState, errorString)) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 13551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) String value(storageArea->getItem(name, exceptionState, frame)); 13651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (hadException(exceptionState, errorString)) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::Array<String> > entry = TypeBuilder::Array<String>::create(); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) entry->addItem(name); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) entry->addItem(value); 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) storageItems->addItem(entry); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) items = storageItems.release(); 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static String toErrorString(ExceptionState& exceptionState) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 14951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return DOMException::getErrorName(exceptionState.code()); 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return ""; 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 153591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid InspectorDOMStorageAgent::setDOMStorageItem(ErrorString* errorString, const RefPtr<JSONObject>& storageId, const String& key, const String& value) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 155d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame; 15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtrWillBeRawPtr<StorageArea> storageArea = findStorageArea(0, storageId, frame); 157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!storageArea) { 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Storage not found"; 159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 16351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) storageArea->setItem(key, value, exceptionState, frame); 16451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) *errorString = toErrorString(exceptionState); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid InspectorDOMStorageAgent::removeDOMStorageItem(ErrorString* errorString, const RefPtr<JSONObject>& storageId, const String& key) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame; 17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtrWillBeRawPtr<StorageArea> storageArea = findStorageArea(0, storageId, frame); 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!storageArea) { 172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Storage not found"; 173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 17651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 17751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) storageArea->removeItem(key, exceptionState, frame); 17851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) *errorString = toErrorString(exceptionState); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<TypeBuilder::DOMStorage::StorageId> InspectorDOMStorageAgent::storageId(SecurityOrigin* securityOrigin, bool isLocalStorage) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return TypeBuilder::DOMStorage::StorageId::create() 184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) .setSecurityOrigin(securityOrigin->toRawString()) 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) .setIsLocalStorage(isLocalStorage).release(); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)void InspectorDOMStorageAgent::didDispatchDOMStorageEvent(const String& key, const String& oldValue, const String& newValue, StorageType storageType, SecurityOrigin* securityOrigin) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!m_frontend || !isEnabled()) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RefPtr<TypeBuilder::DOMStorage::StorageId> id = storageId(securityOrigin, storageType == LocalStorage); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (key.isNull()) 1969e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_frontend->domStorageItemsCleared(id); 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (newValue.isNull()) 1989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_frontend->domStorageItemRemoved(id, key); 199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (oldValue.isNull()) 2009e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_frontend->domStorageItemAdded(id, key, newValue); 201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 2029e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_frontend->domStorageItemUpdated(id, key, oldValue, newValue); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassOwnPtrWillBeRawPtr<StorageArea> InspectorDOMStorageAgent::findStorageArea(ErrorString* errorString, const RefPtr<JSONObject>& storageId, LocalFrame*& targetFrame) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) String securityOrigin; 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isLocalStorage = false; 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool success = storageId->getString("securityOrigin", &securityOrigin); 210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (success) 211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) success = storageId->getBoolean("isLocalStorage", &isLocalStorage); 212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!success) { 213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (errorString) 214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Invalid storageId format"; 215591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return nullptr; 216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_pageAgent->findFrameWithSecurityOrigin(securityOrigin); 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!frame) { 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (errorString) 221d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) *errorString = "LocalFrame not found for the given security origin"; 222591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return nullptr; 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) targetFrame = frame; 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (isLocalStorage) 227591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return StorageNamespace::localStorageArea(frame->document()->securityOrigin()); 228591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return m_pageAgent->page()->sessionStorage()->storageArea(frame->document()->securityOrigin()); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 231c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 233