Index: Source/web/WebLocalFrameImpl.cpp |
diff --git a/Source/web/WebLocalFrameImpl.cpp b/Source/web/WebLocalFrameImpl.cpp |
index 48a17adfc6bd43d1d37e162fd1a13fd2304a2e08..0073b773036eede82e3c7df459ae0394749d1587 100644 |
--- a/Source/web/WebLocalFrameImpl.cpp |
+++ b/Source/web/WebLocalFrameImpl.cpp |
@@ -238,10 +238,13 @@ static void frameContentAsPlainText(size_t maxChars, LocalFrame* frame, StringBu |
// Recursively walk the children. |
const FrameTree& frameTree = frame->tree(); |
- for (LocalFrame* curChild = frameTree.firstChild(); curChild; curChild = curChild->tree().nextSibling()) { |
+ for (Frame* curChild = frameTree.firstChild(); curChild; curChild = curChild->tree().nextSibling()) { |
+ if (!curChild->isLocalFrame()) |
+ continue; |
+ LocalFrame* curLocalChild = toLocalFrame(curChild); |
// Ignore the text of non-visible frames. |
- RenderView* contentRenderer = curChild->contentRenderer(); |
- RenderPart* ownerRenderer = curChild->ownerRenderer(); |
+ RenderView* contentRenderer = curLocalChild->contentRenderer(); |
+ RenderPart* ownerRenderer = curLocalChild->ownerRenderer(); |
if (!contentRenderer || !contentRenderer->width() || !contentRenderer->height() |
|| (contentRenderer->x() + contentRenderer->width() <= 0) || (contentRenderer->y() + contentRenderer->height() <= 0) |
|| (ownerRenderer && ownerRenderer->style() && ownerRenderer->style()->visibility() != VISIBLE)) { |
@@ -257,7 +260,7 @@ static void frameContentAsPlainText(size_t maxChars, LocalFrame* frame, StringBu |
return; |
output.append(frameSeparator, frameSeparatorLength); |
- frameContentAsPlainText(maxChars, curChild, output); |
+ frameContentAsPlainText(maxChars, curLocalChild, output); |
if (output.length() >= maxChars) |
return; // Filled up the buffer. |
} |
@@ -658,21 +661,35 @@ WebFrame* WebLocalFrameImpl::traversePrevious(bool wrap) const |
{ |
if (!frame()) |
return 0; |
- return fromFrame(frame()->tree().traversePreviousWithWrap(wrap)); |
+ // FIXME: This should move to WebFrame and become local/remote agnostic. |
+ Frame* prevFrame = frame()->tree().traversePreviousWithWrap(wrap); |
+ if (!prevFrame || !prevFrame->isLocalFrame()) |
+ return 0; |
+ return fromFrame(toLocalFrame(prevFrame)); |
} |
WebFrame* WebLocalFrameImpl::traverseNext(bool wrap) const |
{ |
+ // FIXME: This should move to WebFrame and become local/remote agnostic. |
if (!frame()) |
return 0; |
- return fromFrame(frame()->tree().traverseNextWithWrap(wrap)); |
+ // FIXME: This should move to WebFrame and become local/remote agnostic. |
+ Frame* nextFrame = frame()->tree().traverseNextWithWrap(wrap); |
+ if (!nextFrame || !nextFrame->isLocalFrame()) |
+ return 0; |
+ return fromFrame(toLocalFrame(nextFrame)); |
} |
WebFrame* WebLocalFrameImpl::findChildByName(const WebString& name) const |
{ |
+ // FIXME: This should move to WebFrame and become local/remote agnostic. |
if (!frame()) |
return 0; |
- return fromFrame(frame()->tree().child(name)); |
+ // FIXME: This should move to WebFrame and become local/remote agnostic. |
+ Frame* child = frame()->tree().child(name); |
+ if (!child || !child->isLocalFrame()) |
+ return 0; |
+ return fromFrame(toLocalFrame(child)); |
} |
WebDocument WebLocalFrameImpl::document() const |