Chromium Code Reviews| Index: Source/web/WebViewImpl.cpp |
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp |
| index b6aab0add60f54b0b88bb0136d36d162ae698a04..b8efffe88eae86329fb1a72d5c1e7d284b029fc2 100644 |
| --- a/Source/web/WebViewImpl.cpp |
| +++ b/Source/web/WebViewImpl.cpp |
| @@ -211,10 +211,10 @@ const double WebView::maxTextSizeMultiplier = 3.0; |
| // Used to defer all page activity in cases where the embedder wishes to run |
| // a nested event loop. Using a stack enables nesting of message loop invocations. |
| -static Vector<ScopedPageLoadDeferrer*>& pageLoadDeferrerStack() |
| +static WillBeHeapVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> >& pageLoadDeferrerStack() |
| { |
| - DEFINE_STATIC_LOCAL(Vector<ScopedPageLoadDeferrer*>, deferrerStack, ()); |
| - return deferrerStack; |
| + DEFINE_STATIC_LOCAL(OwnPtrWillBePersistent<WillBeHeapVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> > >, deferrerStack, (adoptPtrWillBeNoop(new WillBeHeapVector<RawPtrWillBeMember<ScopedPageLoadDeferrer> > ()))); |
| + return *deferrerStack; |
| } |
| // Ensure that the WebDragOperation enum values stay in sync with the original |
| @@ -317,16 +317,30 @@ void WebView::didExitModalLoop() |
| { |
| ASSERT(pageLoadDeferrerStack().size()); |
| - delete pageLoadDeferrerStack().last(); |
| + ScopedPageLoadDeferrer* deferrer = pageLoadDeferrerStack().last(); |
| +#if ENABLE(OILPAN) |
| + deferrer->dispose(); |
| +#else |
| + delete deferrer; |
| +#endif |
| pageLoadDeferrerStack().removeLast(); |
| } |
| void WebViewImpl::setMainFrame(WebFrame* frame) |
| { |
| - if (frame->isWebLocalFrame()) |
| + if (frame->isWebLocalFrame()) { |
| +#if ENABLE(OILPAN) |
| + m_localMainFrame = toWebLocalFrameImpl(frame); |
| + m_remoteMainFrame.clear(); |
| +#endif |
| toWebLocalFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0, nullAtom, nullAtom); |
| - else |
| + } else { |
| +#if ENABLE(OILPAN) |
| + m_localMainFrame.clear(); |
| + m_remoteMainFrame = toWebRemoteFrameImpl(frame); |
| +#endif |
| toWebRemoteFrameImpl(frame)->initializeCoreFrame(&page()->frameHost(), 0, nullAtom); |
| + } |
| } |
| void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) |
| @@ -455,6 +469,10 @@ WebViewImpl::WebViewImpl(WebViewClient* client) |
| WebViewImpl::~WebViewImpl() |
| { |
| ASSERT(!m_page); |
| +#if ENABLE(OILPAN) |
| + // At most one Persistent frame reference should be set. |
| + ASSERT(!(m_localMainFrame && m_remoteMainFrame)); |
|
haraken
2014/09/11 14:47:26
It looks a bit strange that (either of) the persis
sof
2014/09/12 12:26:08
I don't think it is required, as the lifetimes of
|
| +#endif |
| } |
| WebLocalFrameImpl* WebViewImpl::mainFrameImpl() |
| @@ -957,7 +975,7 @@ bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event) |
| return true; |
| } |
| - RefPtr<Frame> focusedFrame = focusedCoreFrame(); |
| + RefPtrWillBeRawPtr<Frame> focusedFrame = focusedCoreFrame(); |
| if (focusedFrame && focusedFrame->isRemoteFrameTemporary()) { |
| WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameTemporary(focusedFrame.get())); |
| webFrame->client()->forwardInputEvent(&event); |
| @@ -967,7 +985,7 @@ bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event) |
| if (!focusedFrame || !focusedFrame->isLocalFrame()) |
| return false; |
| - RefPtr<LocalFrame> frame = toLocalFrame(focusedFrame.get()); |
| + LocalFrame* frame = toLocalFrame(focusedFrame.get()); |
| PlatformKeyboardEventBuilder evt(event); |
| @@ -2029,7 +2047,7 @@ void WebViewImpl::setFocus(bool enable) |
| m_page->focusController().setFocused(enable); |
| if (enable) { |
| m_page->focusController().setActive(true); |
| - RefPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); |
| + RefPtrWillBeRawPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); |
| if (focusedFrame && focusedFrame->isLocalFrame()) { |
| LocalFrame* localFrame = toLocalFrame(focusedFrame.get()); |
| Element* element = localFrame->document()->focusedElement(); |
| @@ -2062,7 +2080,7 @@ void WebViewImpl::setFocus(bool enable) |
| if (!frame) |
| return; |
| - RefPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); |
| + RefPtrWillBeRawPtr<Frame> focusedFrame = m_page->focusController().focusedFrame(); |
| if (focusedFrame && focusedFrame->isLocalFrame()) { |
| // Finish an ongoing composition to delete the composition node. |
| if (toLocalFrame(focusedFrame.get())->inputMethodController().hasComposition()) { |
| @@ -2673,7 +2691,7 @@ void WebViewImpl::setInitialFocus(bool reverse) |
| void WebViewImpl::clearFocusedElement() |
| { |
| - RefPtr<Frame> frame = focusedCoreFrame(); |
| + RefPtrWillBeRawPtr<Frame> frame = focusedCoreFrame(); |
| if (!frame || !frame->isLocalFrame()) |
| return; |