PassRefPtr<InspectorObject> InspectorPageAgent::buildObjectForFrameTree(Frame* frame) { RefPtr<InspectorObject> result = InspectorObject::create(); RefPtr<InspectorObject> frameObject = buildObjectForFrame(frame); result->setObject("frame", frameObject); RefPtr<InspectorArray> subresources = InspectorArray::create(); result->setArray("resources", subresources); Vector<CachedResource*> allResources = cachedResourcesForFrame(frame); for (Vector<CachedResource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) { CachedResource* cachedResource = *it; RefPtr<InspectorObject> resourceObject = InspectorObject::create(); resourceObject->setString("url", cachedResource->url()); resourceObject->setString("type", cachedResourceTypeString(*cachedResource)); resourceObject->setString("mimeType", cachedResource->response().mimeType()); subresources->pushValue(resourceObject); } RefPtr<InspectorArray> childrenArray; for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) { if (!childrenArray) { childrenArray = InspectorArray::create(); result->setArray("childFrames", childrenArray); } childrenArray->pushObject(buildObjectForFrameTree(child)); } return result; }
static Vector<KURL> allResourcesURLsForFrame(LocalFrame* frame) { Vector<KURL> result; result.append(urlWithoutFragment(frame->loader().documentLoader()->url())); Vector<Resource*> allResources = cachedResourcesForFrame(frame); for (Vector<Resource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) result.append(urlWithoutFragment((*it)->url())); return result; }
void InspectorPageAgent::deleteCookie(ErrorString*, const String& cookieName, const String& domain) { for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree()->traverseNext(m_page->mainFrame())) { Document* document = frame->document(); if (document->url().host() != domain) continue; Vector<CachedResource*> allResources = cachedResourcesForFrame(frame); for (Vector<CachedResource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) WebCore::deleteCookie(document, KURL(ParsedURLString, (*it)->url()), cookieName); } }
PassRefPtr<TypeBuilder::Page::FrameResourceTree> InspectorPageAgent::buildObjectForFrameTree(LocalFrame* frame) { RefPtr<TypeBuilder::Page::Frame> frameObject = buildObjectForFrame(frame); RefPtr<TypeBuilder::Array<TypeBuilder::Page::FrameResourceTree::Resources> > subresources = TypeBuilder::Array<TypeBuilder::Page::FrameResourceTree::Resources>::create(); RefPtr<TypeBuilder::Page::FrameResourceTree> result = TypeBuilder::Page::FrameResourceTree::create() .setFrame(frameObject) .setResources(subresources); Vector<Resource*> allResources = cachedResourcesForFrame(frame); for (Vector<Resource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) { Resource* cachedResource = *it; RefPtr<TypeBuilder::Page::FrameResourceTree::Resources> resourceObject = TypeBuilder::Page::FrameResourceTree::Resources::create() .setUrl(urlWithoutFragment(cachedResource->url()).string()) .setType(cachedResourceTypeJson(*cachedResource)) .setMimeType(cachedResource->response().mimeType()); if (cachedResource->wasCanceled()) resourceObject->setCanceled(true); else if (cachedResource->status() == Resource::LoadError) resourceObject->setFailed(true); subresources->addItem(resourceObject); } Vector<Document*> allImports = importsForFrame(frame); for (Vector<Document*>::const_iterator it = allImports.begin(); it != allImports.end(); ++it) { Document* import = *it; RefPtr<TypeBuilder::Page::FrameResourceTree::Resources> resourceObject = TypeBuilder::Page::FrameResourceTree::Resources::create() .setUrl(urlWithoutFragment(import->url()).string()) .setType(resourceTypeJson(InspectorPageAgent::DocumentResource)) .setMimeType(import->suggestedMIMEType()); subresources->addItem(resourceObject); } RefPtr<TypeBuilder::Array<TypeBuilder::Page::FrameResourceTree> > childrenArray; for (Frame* child = frame->tree().firstChild(); child; child = child->tree().nextSibling()) { if (!child->isLocalFrame()) continue; if (!childrenArray) { childrenArray = TypeBuilder::Array<TypeBuilder::Page::FrameResourceTree>::create(); result->setChildFrames(childrenArray); } childrenArray->addItem(buildObjectForFrameTree(toLocalFrame(child))); } return result; }
void InspectorPageAgent::getCookies(ErrorString*, RefPtr<InspectorArray>* cookies, WTF::String* cookiesString) { // If we can get raw cookies. ListHashSet<Cookie> rawCookiesList; // If we can't get raw cookies - fall back to String representation String stringCookiesList; // Return value to getRawCookies should be the same for every call because // the return value is platform/network backend specific, and the call will // always return the same true/false value. bool rawCookiesImplemented = false; for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext(mainFrame())) { Document* document = frame->document(); Vector<CachedResource*> allResources = cachedResourcesForFrame(frame); for (Vector<CachedResource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) { Vector<Cookie> docCookiesList; rawCookiesImplemented = getRawCookies(document, KURL(ParsedURLString, (*it)->url()), docCookiesList); if (!rawCookiesImplemented) { // FIXME: We need duplication checking for the String representation of cookies. ExceptionCode ec = 0; stringCookiesList += document->cookie(ec); // Exceptions are thrown by cookie() in sandboxed frames. That won't happen here // because "document" is the document of the main frame of the page. ASSERT(!ec); } else { int cookiesSize = docCookiesList.size(); for (int i = 0; i < cookiesSize; i++) { if (!rawCookiesList.contains(docCookiesList[i])) rawCookiesList.add(docCookiesList[i]); } } } } if (rawCookiesImplemented) *cookies = buildArrayForCookies(rawCookiesList); else *cookiesString = stringCookiesList; }
void InspectorPageAgent::searchInResources(ErrorString*, const String& text, const bool* const optionalCaseSensitive, const bool* const optionalIsRegex, RefPtr<InspectorArray>* object) { RefPtr<InspectorArray> result = InspectorArray::create(); bool isRegex = optionalIsRegex ? *optionalIsRegex : false; String regexSource = isRegex ? text : createSearchRegexSource(text); bool caseSensitive = optionalCaseSensitive ? *optionalCaseSensitive : false; RegularExpression regex(regexSource, caseSensitive ? TextCaseSensitive : TextCaseInsensitive); for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree()->traverseNext(m_page->mainFrame())) { String content; bool base64Encoded; Vector<CachedResource*> allResources = cachedResourcesForFrame(frame); for (Vector<CachedResource*>::const_iterator it = allResources.begin(); it != allResources.end(); ++it) { CachedResource* cachedResource = *it; switch (InspectorPageAgent::cachedResourceType(*cachedResource)) { case InspectorPageAgent::StylesheetResource: case InspectorPageAgent::ScriptResource: if (cachedResourceContent(cachedResource, &content, &base64Encoded)) { ASSERT(!base64Encoded); int matchesCount = countRegularExpressionMatches(regex, content); if (matchesCount) result->pushValue(buildObjectForSearchMatch(frameId(frame), cachedResource->url(), matchesCount)); } break; default: break; } } if (mainResourceContent(frame, false, &content)) { int matchesCount = countRegularExpressionMatches(regex, content); if (matchesCount) result->pushValue(buildObjectForSearchMatch(frameId(frame), frame->document()->url(), matchesCount)); } } *object = result; }