Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 23506013: Make the embedder responsible for creating the WebFrame (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix lifetime on frame detach Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | Source/web/tests/AssociatedURLLoaderTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 if (webInputEventKeyState & WebInputEvent::MetaKey) 264 if (webInputEventKeyState & WebInputEvent::MetaKey)
265 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent:: MetaKey; 265 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent:: MetaKey;
266 return platformEventKeyState; 266 return platformEventKeyState;
267 } 267 }
268 268
269 // WebView ---------------------------------------------------------------- 269 // WebView ----------------------------------------------------------------
270 270
271 WebView* WebView::create(WebViewClient* client) 271 WebView* WebView::create(WebViewClient* client)
272 { 272 {
273 // Pass the WebViewImpl's self-reference to the caller. 273 // Pass the WebViewImpl's self-reference to the caller.
274 return WebViewImpl::create(client);
275 }
276
277 WebViewImpl* WebViewImpl::create(WebViewClient* client)
278 {
279 // Pass the WebViewImpl's self-reference to the caller.
274 return adoptRef(new WebViewImpl(client)).leakRef(); 280 return adoptRef(new WebViewImpl(client)).leakRef();
275 } 281 }
276 282
277 void WebView::setUseExternalPopupMenus(bool useExternalPopupMenus) 283 void WebView::setUseExternalPopupMenus(bool useExternalPopupMenus)
278 { 284 {
279 shouldUseExternalPopupMenus = useExternalPopupMenus; 285 shouldUseExternalPopupMenus = useExternalPopupMenus;
280 } 286 }
281 287
282 void WebView::updateVisitedLinkState(unsigned long long linkHash) 288 void WebView::updateVisitedLinkState(unsigned long long linkHash)
283 { 289 {
(...skipping 23 matching lines...) Expand all
307 } 313 }
308 314
309 void WebView::didExitModalLoop() 315 void WebView::didExitModalLoop()
310 { 316 {
311 ASSERT(pageGroupLoadDeferrerStack().size()); 317 ASSERT(pageGroupLoadDeferrerStack().size());
312 318
313 delete pageGroupLoadDeferrerStack().last(); 319 delete pageGroupLoadDeferrerStack().last();
314 pageGroupLoadDeferrerStack().removeLast(); 320 pageGroupLoadDeferrerStack().removeLast();
315 } 321 }
316 322
323 void WebViewImpl::setMainFrame(WebFrame* frame)
324 {
325 // NOTE: The WebFrameImpl takes a reference to itself within
326 // initializeAsMainFrame() and releases that reference once the
327 // corresponding Frame is destroyed.
328 toWebFrameImpl(frame)->initializeAsMainFrame(page());
329 }
330
317 void WebViewImpl::initializeMainFrame(WebFrameClient* frameClient) 331 void WebViewImpl::initializeMainFrame(WebFrameClient* frameClient)
318 { 332 {
319 // NOTE: The WebFrameImpl takes a reference to itself within InitMainFrame 333 // NOTE: Previously, WebViewImpl was responsible for allocating its own
320 // and releases that reference once the corresponding Frame is destroyed. 334 // mainframe. This code is for supporting clients that have yet to move
321 RefPtr<WebFrameImpl> frame = WebFrameImpl::create(frameClient); 335 // to setMainFrame(). Though the setMainFrame() accepts a raw pointer, it
322 336 // implicitly takes a refcount on the frame. Dropping our RefPtr here
323 frame->initializeAsMainFrame(page()); 337 // will effectively pass ownership to m_page. New users of WebViewImpl
324 } 338 // should call WebFrameImpl::create() to construct their own mainframe,
325 339 // pass it into WebViewImpl::setMainFrame(), keep a pointer to the
326 void WebViewImpl::initializeHelperPluginFrame(WebFrameClient* client) 340 // mainframe, and call WebFrameImpl::close() on it when closing the
327 { 341 // WebViewImpl.
328 RefPtr<WebFrameImpl> frame = WebFrameImpl::create(client); 342 RefPtr<WebFrameImpl> frame = adoptRef(WebFrameImpl::create(frameClient));
343 setMainFrame(frame.get());
329 } 344 }
330 345
331 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient) 346 void WebViewImpl::setAutofillClient(WebAutofillClient* autofillClient)
332 { 347 {
333 m_autofillClient = autofillClient; 348 m_autofillClient = autofillClient;
334 } 349 }
335 350
336 void WebViewImpl::setDevToolsAgentClient(WebDevToolsAgentClient* devToolsClient) 351 void WebViewImpl::setDevToolsAgentClient(WebDevToolsAgentClient* devToolsClient)
337 { 352 {
338 if (devToolsClient) 353 if (devToolsClient)
(...skipping 3845 matching lines...) Expand 10 before | Expand all | Expand 10 after
4184 // the initial viewport width. 4199 // the initial viewport width.
4185 // 2. The author has disabled viewport zoom. 4200 // 2. The author has disabled viewport zoom.
4186 4201
4187 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints(); 4202 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints();
4188 4203
4189 return fixedLayoutSize().width == m_size.width 4204 return fixedLayoutSize().width == m_size.width
4190 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4205 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4191 } 4206 }
4192 4207
4193 } // namespace WebKit 4208 } // namespace WebKit
OLDNEW
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | Source/web/tests/AssociatedURLLoaderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698