15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. 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) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorApplicationCacheAgent.h" 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorPageAgent.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorState.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InstrumentingAgents.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/page/NetworkStateNotifier.h" 36c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/text/StringBuilder.h" 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace ApplicationCacheAgentState { 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const char applicationCacheAgentEnabled[] = "applicationCacheAgentEnabled"; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)InspectorApplicationCacheAgent::InspectorApplicationCacheAgent(InspectorPageAgent* pageAgent) 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) : InspectorBaseAgent<InspectorApplicationCacheAgent>("ApplicationCache") 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_pageAgent(pageAgent) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_frontend(0) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::setFrontend(InspectorFrontend* frontend) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frontend = frontend->applicationcache(); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::clearFrontend() 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_instrumentingAgents->setInspectorApplicationCacheAgent(0); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frontend = 0; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::restore() 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_state->getBoolean(ApplicationCacheAgentState::applicationCacheAgentEnabled)) { 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ErrorString error; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enable(&error); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::enable(ErrorString*) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_state->setBoolean(ApplicationCacheAgentState::applicationCacheAgentEnabled, true); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_instrumentingAgents->setInspectorApplicationCacheAgent(this); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We need to pass initial navigator.onOnline. 761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) networkStateChanged(networkStateNotifier().onLine()); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void InspectorApplicationCacheAgent::updateApplicationCacheStatus(LocalFrame* frame) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 81f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) DocumentLoader* documentLoader = frame->loader().documentLoader(); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!documentLoader) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost* host = documentLoader->applicationCacheHost(); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::Status status = host->status(); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::CacheInfo info = host->applicationCacheInfo(); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String manifestURL = info.m_manifest.string(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frontend->applicationCacheStatusUpdated(m_pageAgent->frameId(frame), manifestURL, static_cast<int>(status)); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 931e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void InspectorApplicationCacheAgent::networkStateChanged(bool online) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_frontend->networkStateUpdated(online); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::getFramesWithManifests(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::FrameWithManifest> >& result) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = TypeBuilder::Array<TypeBuilder::ApplicationCache::FrameWithManifest>::create(); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 102d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* mainFrame = m_pageAgent->mainFrame(); 103f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame; frame; frame = frame->tree().traverseNext(mainFrame)) { 104f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!frame->isLocalFrame()) 105f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) continue; 106f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) DocumentLoader* documentLoader = toLocalFrame(frame)->loader().documentLoader(); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!documentLoader) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost* host = documentLoader->applicationCacheHost(); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::CacheInfo info = host->applicationCacheInfo(); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String manifestURL = info.m_manifest.string(); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!manifestURL.isEmpty()) { 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::ApplicationCache::FrameWithManifest> value = TypeBuilder::ApplicationCache::FrameWithManifest::create() 115f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) .setFrameId(m_pageAgent->frameId(toLocalFrame(frame))) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setManifestURL(manifestURL) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setStatus(static_cast<int>(host->status())); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result->addItem(value); 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DocumentLoader* InspectorApplicationCacheAgent::assertFrameWithDocumentLoader(ErrorString* errorString, String frameId) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_pageAgent->assertFrame(errorString, frameId); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return InspectorPageAgent::assertDocumentLoader(errorString, frame); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::getManifestForFrame(ErrorString* errorString, const String& frameId, String* manifestURL) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* documentLoader = assertFrameWithDocumentLoader(errorString, frameId); 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!documentLoader) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::CacheInfo info = documentLoader->applicationCacheHost()->applicationCacheInfo(); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *manifestURL = info.m_manifest.string(); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void InspectorApplicationCacheAgent::getApplicationCacheForFrame(ErrorString* errorString, const String& frameId, RefPtr<TypeBuilder::ApplicationCache::ApplicationCache>& applicationCache) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* documentLoader = assertFrameWithDocumentLoader(errorString, frameId); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!documentLoader) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost* host = documentLoader->applicationCacheHost(); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::CacheInfo info = host->applicationCacheInfo(); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::ResourceInfoList resources; 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) host->fillResourceList(&resources); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) applicationCache = buildObjectForApplicationCache(resources, info); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<TypeBuilder::ApplicationCache::ApplicationCache> InspectorApplicationCacheAgent::buildObjectForApplicationCache(const ApplicationCacheHost::ResourceInfoList& applicationCacheResources, const ApplicationCacheHost::CacheInfo& applicationCacheInfo) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::ApplicationCache::ApplicationCache::create() 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setManifestURL(applicationCacheInfo.m_manifest.string()) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setSize(applicationCacheInfo.m_size) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setCreationTime(applicationCacheInfo.m_creationTime) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setUpdateTime(applicationCacheInfo.m_updateTime) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setResources(buildArrayForApplicationCacheResources(applicationCacheResources)) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .release(); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource> > InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources(const ApplicationCacheHost::ResourceInfoList& applicationCacheResources) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource> > resources = TypeBuilder::Array<TypeBuilder::ApplicationCache::ApplicationCacheResource>::create(); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::ResourceInfoList::const_iterator end = applicationCacheResources.end(); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplicationCacheHost::ResourceInfoList::const_iterator it = applicationCacheResources.begin(); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (int i = 0; it != end; ++it, i++) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resources->addItem(buildObjectForApplicationCacheResource(*it)); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return resources; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<TypeBuilder::ApplicationCache::ApplicationCacheResource> InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource(const ApplicationCacheHost::ResourceInfo& resourceInfo) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 182c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) StringBuilder builder; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceInfo.m_isMaster) 1849e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) builder.appendLiteral("Master "); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceInfo.m_isManifest) 1879e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) builder.appendLiteral("Manifest "); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceInfo.m_isFallback) 1909e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) builder.appendLiteral("Fallback "); 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceInfo.m_isForeign) 1939e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) builder.appendLiteral("Foreign "); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceInfo.m_isExplicit) 1969e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) builder.appendLiteral("Explicit "); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::ApplicationCache::ApplicationCacheResource> value = TypeBuilder::ApplicationCache::ApplicationCacheResource::create() 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setUrl(resourceInfo.m_resource.string()) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setSize(static_cast<int>(resourceInfo.m_size)) 201c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) .setType(builder.toString()); 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 205c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void InspectorApplicationCacheAgent::trace(Visitor* visitor) 206c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 207c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) visitor->trace(m_pageAgent); 208c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) InspectorBaseAgent::trace(visitor); 209c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 210c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 211c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 213