| Index: Source/web/WebViewImpl.cpp | 
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp | 
| index ed67d3c13a51a80ff78c4f222a4cc9401e4a4ea7..74092761397a34730c649cd2b18d83b0c11b6351 100644 | 
| --- a/Source/web/WebViewImpl.cpp | 
| +++ b/Source/web/WebViewImpl.cpp | 
| @@ -210,10 +210,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 | 
| @@ -316,16 +316,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) | 
| @@ -454,6 +468,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)); | 
| +#endif | 
| } | 
|  | 
| WebLocalFrameImpl* WebViewImpl::mainFrameImpl() | 
| @@ -955,7 +973,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); | 
| @@ -965,7 +983,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); | 
|  | 
| @@ -2027,7 +2045,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(); | 
| @@ -2060,7 +2078,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()) { | 
| @@ -2671,7 +2689,7 @@ void WebViewImpl::setInitialFocus(bool reverse) | 
|  | 
| void WebViewImpl::clearFocusedElement() | 
| { | 
| -    RefPtr<Frame> frame = focusedCoreFrame(); | 
| +    RefPtrWillBeRawPtr<Frame> frame = focusedCoreFrame(); | 
| if (!frame || !frame->isLocalFrame()) | 
| return; | 
|  | 
|  |