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

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

Issue 517043003: Move Frame to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase past r181764 Created 6 years, 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2011, Google Inc. All rights reserved. 2 * Copyright (c) 2011, 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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 void PopupContainer::hidePopup() 233 void PopupContainer::hidePopup()
234 { 234 {
235 listBox()->abandon(); 235 listBox()->abandon();
236 } 236 }
237 237
238 void PopupContainer::notifyPopupHidden() 238 void PopupContainer::notifyPopupHidden()
239 { 239 {
240 if (!m_popupOpen) 240 if (!m_popupOpen)
241 return; 241 return;
242 m_popupOpen = false; 242 m_popupOpen = false;
243 WebViewImpl::fromPage(m_frameView->frame().page())->popupClosed(this); 243
244 // With Oilpan, we cannot assume that the FrameView's LocalFrame's
245 // page is still available, as the LocalFrame itself may have been
246 // detached from its FrameHost by now.
247 //
248 // So, if a popup menu is left in an open/shown state when
249 // finalized, the PopupMenu implementation of this container's
250 // listbox will hide itself when destructed, delivering this
251 // notifyPopupHidden() notification in the process. Should the
252 // LocalFrame have become detached first (when its
253 // HTMLFrameOwnerElement frame owner is detached as part of being
254 // finalized), the connection to the FrameHost has been snipped &
255 // there's no page. Hence the null check.
256 //
257 // (In a non-Oilpan setting, the object owning the PopupMenu and
258 // this PopupContainer is torn down and destructed before the
259 // frame and frame owner, hence the page will always be available
260 // here.)
261 if (WebViewImpl* webView = WebViewImpl::fromPage(m_frameView->frame().page() ))
262 webView->popupClosed(this);
244 } 263 }
245 264
246 void PopupContainer::fitToListBox() 265 void PopupContainer::fitToListBox()
247 { 266 {
248 // Place the listbox within our border. 267 // Place the listbox within our border.
249 m_listBox->move(borderSize, borderSize); 268 m_listBox->move(borderSize, borderSize);
250 269
251 // Size ourselves to contain listbox + border. 270 // Size ourselves to contain listbox + border.
252 resize(m_listBox->width() + borderSize * 2, m_listBox->height() + borderSize * 2); 271 resize(m_listBox->width() + borderSize * 2, m_listBox->height() + borderSize * 2);
253 invalidate(); 272 invalidate();
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 } 527 }
509 528
510 info->itemHeight = menuItemHeight(); 529 info->itemHeight = menuItemHeight();
511 info->itemFontSize = menuItemFontSize(); 530 info->itemFontSize = menuItemFontSize();
512 info->selectedIndex = selectedIndex(); 531 info->selectedIndex = selectedIndex();
513 info->items.swap(outputItems); 532 info->items.swap(outputItems);
514 info->rightAligned = menuStyle().textDirection() == RTL; 533 info->rightAligned = menuStyle().textDirection() == RTL;
515 } 534 }
516 535
517 } // namespace blink 536 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698