Index: Source/web/WebViewImpl.cpp |
diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp |
index 3cd8a54068bd35a1e95930c193eb081fc28904e9..a5767401648726af7d239c11a99e500cd75552b7 100644 |
--- a/Source/web/WebViewImpl.cpp |
+++ b/Source/web/WebViewImpl.cpp |
@@ -270,6 +270,12 @@ static int webInputEventKeyStateToPlatformEventKeyState(int webInputEventKeyStat |
WebView* WebView::create(WebViewClient* client) |
{ |
// Pass the WebViewImpl's self-reference to the caller. |
+ return WebViewImpl::create(client); |
+} |
+ |
+WebViewImpl* WebViewImpl::create(WebViewClient* client) |
+{ |
+ // Pass the WebViewImpl's self-reference to the caller. |
return adoptRef(new WebViewImpl(client)).leakRef(); |
} |
@@ -313,18 +319,26 @@ void WebView::didExitModalLoop() |
pageGroupLoadDeferrerStack().removeLast(); |
} |
-void WebViewImpl::initializeMainFrame(WebFrameClient* frameClient) |
+void WebViewImpl::setMainFrame(WebFrame* frame) |
{ |
// NOTE: The WebFrameImpl takes a reference to itself within InitMainFrame |
darin (slow to review)
2013/09/19 22:36:19
nit: InitMainFrame -> initializeAsMainFrame.
awong
2013/09/20 00:36:24
Done.
|
// and releases that reference once the corresponding Frame is destroyed. |
- RefPtr<WebFrameImpl> frame = WebFrameImpl::create(frameClient); |
- |
- frame->initializeAsMainFrame(page()); |
+ static_cast<WebFrameImpl*>(frame)->initializeAsMainFrame(page()); |
} |
-void WebViewImpl::initializeHelperPluginFrame(WebFrameClient* client) |
+void WebViewImpl::initializeMainFrame(WebFrameClient* frameClient) |
{ |
- RefPtr<WebFrameImpl> frame = WebFrameImpl::create(client); |
+ // NOTE: Previously, WebViewImpl was responsible for allocating its own |
+ // mainframe. This code is for supporting clients that have yet to move |
+ // to setMainFrame(). Though the setMainFrame() accepts a raw pointer, it |
+ // implicitly takes a refcount on the frame. Dropping our RefPtr here |
+ // will effectively pass ownership to m_page. New users of WebViewImpl |
+ // should call WebFrameImpl::create() to construct their own mainframe, |
+ // pass it into WebViewImpl::setMainFrame(), keep a pointer to the |
+ // mainframe, and call WebFrameImpl::close() on it when closing the |
+ // WebViewImpl. |
+ RefPtr<WebFrameImpl> frame = adoptRef(WebFrameImpl::create(frameClient)); |
+ setMainFrame(frame.get()); |
} |
void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) |