static string dumpFramesAsPrintedText(WebFrame* frame, bool recursive) { string result; // Cannot do printed format for anything other than HTML if (!frame->document().isHTMLDocument()) return string(); // Add header for all but the main frame. Skip empty frames. if (frame->parent() && !frame->document().documentElement().isNull()) { result.append("\n--------\nFrame: '"); result.append(frame->name().utf8().data()); result.append("'\n--------\n"); } result.append(frame->renderTreeAsText(WebFrame::RenderAsTextPrinting).utf8()); result.append("\n"); if (recursive) { for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) result.append(dumpFramesAsPrintedText(child, recursive)); } return result; }
ALWAYS_INLINE void WebFrame::traceFramesImpl(VisitorDispatcher visitor, WebFrame* frame) { ASSERT(frame); traceFrame(visitor, frame->m_parent); for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) traceFrame(visitor, child); // m_opener is a weak reference. frame->m_openedFrameTracker->traceFrames(visitor); }
static void dumpFrameScrollPosition(WebFrame* frame, bool recursive) { WebSize offset = frame->scrollOffset(); if (offset.width > 0 || offset.height > 0) { if (frame->parent()) printf("frame '%s' ", frame->name().utf8().data()); printf("scrolled to %d,%d\n", offset.width, offset.height); } if (!recursive) return; for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) dumpFrameScrollPosition(child, recursive); }
string dumpFrameScrollPosition(WebFrame* frame, bool recursive) { string result; WebSize offset = frame->scrollOffset(); if (offset.width > 0 || offset.height > 0) { if (frame->parent()) result = string("frame '") + frame->uniqueName().utf8().data() + "' "; char data[100]; snprintf(data, sizeof(data), "scrolled to %d,%d\n", offset.width, offset.height); result += data; } if (!recursive) return result; for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) result += dumpFrameScrollPosition(child, recursive); return result; }
void TouchActionTest::runIFrameTest(std::string file) { TouchActionTrackingWebViewClient client; WebView* webView = setupTest(file, client); WebFrame* curFrame = webView->mainFrame()->firstChild(); ASSERT_TRUE(curFrame); for (; curFrame; curFrame = curFrame->nextSibling()) { // Oilpan: see runTouchActionTest() comment why these are persistent // references. Persistent<Document> contentDoc = static_cast<Document*>(curFrame->document()); runTestOnTree(contentDoc.get(), webView, client); } // Explicitly reset to break dependency on locally scoped client. m_webViewHelper.reset(); }
void TextFinder::updateFindMatchRects() { IntSize currentContentsSize = ownerFrame().contentsSize(); if (m_contentsSizeForCurrentFindMatchRects != currentContentsSize) { m_contentsSizeForCurrentFindMatchRects = currentContentsSize; m_findMatchRectsAreValid = false; } size_t deadMatches = 0; for (FindMatch& match : m_findMatchesCache) { if (!match.m_range->boundaryPointsValid() || !match.m_range->startContainer()->isConnected()) match.m_rect = FloatRect(); else if (!m_findMatchRectsAreValid) match.m_rect = findInPageRectFromRange(match.m_range.get()); if (match.m_rect.isEmpty()) ++deadMatches; } // Remove any invalid matches from the cache. if (deadMatches) { HeapVector<FindMatch> filteredMatches; filteredMatches.reserveCapacity(m_findMatchesCache.size() - deadMatches); for (const FindMatch& match : m_findMatchesCache) { if (!match.m_rect.isEmpty()) filteredMatches.append(match); } m_findMatchesCache.swap(filteredMatches); } // Invalidate the rects in child frames. Will be updated later during // traversal. if (!m_findMatchRectsAreValid) for (WebFrame* child = ownerFrame().firstChild(); child; child = child->nextSibling()) toWebLocalFrameImpl(child)->ensureTextFinder().m_findMatchRectsAreValid = false; m_findMatchRectsAreValid = true; }
static string dumpFramesAsText(WebFrame* frame, bool recursive) { string result; // Add header for all but the main frame. Skip empty frames. if (frame->parent() && !frame->document().documentElement().isNull()) { result.append("\n--------\nFrame: '"); result.append(frame->name().utf8().data()); result.append("'\n--------\n"); } result.append(dumpDocumentText(frame)); result.append("\n"); if (recursive) { for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling()) result.append(dumpFramesAsText(child, recursive)); } return result; }
void TextFinder::updateFindMatchRects() { IntSize currentContentsSize = m_ownerFrame.contentsSize(); if (m_contentsSizeForCurrentFindMatchRects != currentContentsSize) { m_contentsSizeForCurrentFindMatchRects = currentContentsSize; m_findMatchRectsAreValid = false; } size_t deadMatches = 0; for (Vector<FindMatch>::iterator it = m_findMatchesCache.begin(); it != m_findMatchesCache.end(); ++it) { if (!it->m_range->boundaryPointsValid() || !it->m_range->startContainer()->inDocument()) it->m_rect = FloatRect(); else if (!m_findMatchRectsAreValid) it->m_rect = findInPageRectFromRange(it->m_range.get()); if (it->m_rect.isEmpty()) ++deadMatches; } // Remove any invalid matches from the cache. if (deadMatches) { WillBeHeapVector<FindMatch> filteredMatches; filteredMatches.reserveCapacity(m_findMatchesCache.size() - deadMatches); for (Vector<FindMatch>::const_iterator it = m_findMatchesCache.begin(); it != m_findMatchesCache.end(); ++it) { if (!it->m_rect.isEmpty()) filteredMatches.append(*it); } m_findMatchesCache.swap(filteredMatches); } // Invalidate the rects in child frames. Will be updated later during traversal. if (!m_findMatchRectsAreValid) for (WebFrame* child = m_ownerFrame.firstChild(); child; child = child->nextSibling()) toWebLocalFrameImpl(child)->ensureTextFinder().m_findMatchRectsAreValid = false; m_findMatchRectsAreValid = true; }