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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp

Issue 2564633002: Don't create layout objects for children of display-none iframes. (Closed)
Patch Set: Rebase. Created 3 years, 10 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) 2006, 2007, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 } 214 }
215 215
216 void HTMLFrameOwnerElement::disposeWidgetSoon(Widget* widget) { 216 void HTMLFrameOwnerElement::disposeWidgetSoon(Widget* widget) {
217 if (s_updateSuspendCount) { 217 if (s_updateSuspendCount) {
218 widgetsPendingDispose().insert(widget); 218 widgetsPendingDispose().insert(widget);
219 return; 219 return;
220 } 220 }
221 widget->dispose(); 221 widget->dispose();
222 } 222 }
223 223
224 void HTMLFrameOwnerElement::frameOwnerPropertiesChanged() {
225 // Don't notify about updates if contentFrame() is null, for example when
226 // the subframe hasn't been created yet.
227 if (contentFrame())
228 document().frame()->loader().client()->didChangeFrameOwnerProperties(this);
229 }
230
224 void HTMLFrameOwnerElement::dispatchLoad() { 231 void HTMLFrameOwnerElement::dispatchLoad() {
225 dispatchScopedEvent(Event::create(EventTypeNames::load)); 232 dispatchScopedEvent(Event::create(EventTypeNames::load));
226 } 233 }
227 234
228 const WebVector<WebPermissionType>& 235 const WebVector<WebPermissionType>&
229 HTMLFrameOwnerElement::delegatedPermissions() const { 236 HTMLFrameOwnerElement::delegatedPermissions() const {
230 DEFINE_STATIC_LOCAL(WebVector<WebPermissionType>, permissions, ()); 237 DEFINE_STATIC_LOCAL(WebVector<WebPermissionType>, permissions, ());
231 return permissions; 238 return permissions;
232 } 239 }
233 240
234 Document* HTMLFrameOwnerElement::getSVGDocument( 241 Document* HTMLFrameOwnerElement::getSVGDocument(
235 ExceptionState& exceptionState) const { 242 ExceptionState& exceptionState) const {
236 Document* doc = contentDocument(); 243 Document* doc = contentDocument();
237 if (doc && doc->isSVGDocument()) 244 if (doc && doc->isSVGDocument())
238 return doc; 245 return doc;
239 return nullptr; 246 return nullptr;
240 } 247 }
241 248
242 void HTMLFrameOwnerElement::setWidget(Widget* widget) { 249 void HTMLFrameOwnerElement::setWidget(Widget* widget) {
243 if (widget == m_widget) 250 if (widget == m_widget)
244 return; 251 return;
245 252
253 Document* doc = contentDocument();
254 if (doc && doc->frame()) {
255 bool willBeDisplayNone = !widget;
256 if (isDisplayNone() != willBeDisplayNone) {
257 doc->willChangeFrameOwnerProperties(marginWidth(), marginHeight(),
258 scrollingMode(), willBeDisplayNone);
259 }
260 }
261
246 if (m_widget) { 262 if (m_widget) {
247 if (m_widget->parent()) 263 if (m_widget->parent())
248 moveWidgetToParentSoon(m_widget.get(), 0); 264 moveWidgetToParentSoon(m_widget.get(), 0);
249 m_widget = nullptr; 265 m_widget = nullptr;
250 } 266 }
251 267
252 m_widget = widget; 268 m_widget = widget;
269 frameOwnerPropertiesChanged();
253 270
254 LayoutPart* layoutPart = toLayoutPart(layoutObject()); 271 LayoutPart* layoutPart = toLayoutPart(layoutObject());
255 LayoutPartItem layoutPartItem = LayoutPartItem(layoutPart); 272 LayoutPartItem layoutPartItem = LayoutPartItem(layoutPart);
256 if (layoutPartItem.isNull()) 273 if (layoutPartItem.isNull())
257 return; 274 return;
258 275
259 if (m_widget) { 276 if (m_widget) {
260 layoutPartItem.updateOnWidgetChange(); 277 layoutPartItem.updateOnWidgetChange();
261 278
262 DCHECK_EQ(document().view(), layoutPartItem.frameView()); 279 DCHECK_EQ(document().view(), layoutPartItem.frameView());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 } 339 }
323 340
324 DEFINE_TRACE(HTMLFrameOwnerElement) { 341 DEFINE_TRACE(HTMLFrameOwnerElement) {
325 visitor->trace(m_contentFrame); 342 visitor->trace(m_contentFrame);
326 visitor->trace(m_widget); 343 visitor->trace(m_widget);
327 HTMLElement::trace(visitor); 344 HTMLElement::trace(visitor);
328 FrameOwner::trace(visitor); 345 FrameOwner::trace(visitor);
329 } 346 }
330 347
331 } // namespace blink 348 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698