OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
247 DOMWindowSet::iterator it = set.find(domWindow); | 247 DOMWindowSet::iterator it = set.find(domWindow); |
248 if (it == set.end()) | 248 if (it == set.end()) |
249 return; | 249 return; |
250 set.removeAll(it); | 250 set.removeAll(it); |
251 if (set.isEmpty()) { | 251 if (set.isEmpty()) { |
252 updateSuddenTerminationStatus(domWindow, false, | 252 updateSuddenTerminationStatus(domWindow, false, |
253 LocalFrameClient::BeforeUnloadHandler); | 253 LocalFrameClient::BeforeUnloadHandler); |
254 } | 254 } |
255 } | 255 } |
256 | 256 |
257 static bool allowsBeforeUnloadListeners(LocalDOMWindow* window) { | |
258 DCHECK(window); | |
259 LocalFrame* frame = window->frame(); | |
260 if (!frame) | |
261 return false; | |
262 return frame->isMainFrame(); | |
263 } | |
264 | |
265 unsigned LocalDOMWindow::pendingUnloadEventListeners() const { | 257 unsigned LocalDOMWindow::pendingUnloadEventListeners() const { |
266 return windowsWithUnloadEventListeners().count( | 258 return windowsWithUnloadEventListeners().count( |
267 const_cast<LocalDOMWindow*>(this)); | 259 const_cast<LocalDOMWindow*>(this)); |
268 } | 260 } |
269 | 261 |
270 bool LocalDOMWindow::allowPopUp(LocalFrame& firstFrame) { | 262 bool LocalDOMWindow::allowPopUp(LocalFrame& firstFrame) { |
271 if (UserGestureIndicator::utilizeUserGesture()) | 263 if (UserGestureIndicator::utilizeUserGesture()) |
272 return true; | 264 return true; |
273 | 265 |
274 Settings* settings = firstFrame.settings(); | 266 Settings* settings = firstFrame.settings(); |
(...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1426 | 1418 |
1427 for (auto& it : m_eventListenerObservers) { | 1419 for (auto& it : m_eventListenerObservers) { |
1428 it->didAddEventListener(this, eventType); | 1420 it->didAddEventListener(this, eventType); |
1429 } | 1421 } |
1430 | 1422 |
1431 if (eventType == EventTypeNames::unload) { | 1423 if (eventType == EventTypeNames::unload) { |
1432 UseCounter::count(document(), UseCounter::DocumentUnloadRegistered); | 1424 UseCounter::count(document(), UseCounter::DocumentUnloadRegistered); |
1433 addUnloadEventListener(this); | 1425 addUnloadEventListener(this); |
1434 } else if (eventType == EventTypeNames::beforeunload) { | 1426 } else if (eventType == EventTypeNames::beforeunload) { |
1435 UseCounter::count(document(), UseCounter::DocumentBeforeUnloadRegistered); | 1427 UseCounter::count(document(), UseCounter::DocumentBeforeUnloadRegistered); |
1436 if (allowsBeforeUnloadListeners(this)) { | 1428 addBeforeUnloadEventListener(this); |
1437 // This is confusingly named. It doesn't actually add the listener. It | 1429 if (frame() && !frame()->isMainFrame()) |
1438 // just increments a count so that we know we have listeners registered | |
1439 // for the purposes of determining if we can fast terminate the renderer | |
1440 // process. | |
dcheng
2017/03/29 23:03:46
Nit: please keep this comment.
jam
2017/03/30 14:53:23
Done.
| |
1441 addBeforeUnloadEventListener(this); | |
1442 } else { | |
1443 // Subframes return false from allowsBeforeUnloadListeners. | |
1444 UseCounter::count(document(), UseCounter::SubFrameBeforeUnloadRegistered); | 1430 UseCounter::count(document(), UseCounter::SubFrameBeforeUnloadRegistered); |
1445 } | |
1446 } | 1431 } |
1447 } | 1432 } |
1448 | 1433 |
1449 void LocalDOMWindow::removedEventListener( | 1434 void LocalDOMWindow::removedEventListener( |
1450 const AtomicString& eventType, | 1435 const AtomicString& eventType, |
1451 const RegisteredEventListener& registeredListener) { | 1436 const RegisteredEventListener& registeredListener) { |
1452 DOMWindow::removedEventListener(eventType, registeredListener); | 1437 DOMWindow::removedEventListener(eventType, registeredListener); |
1453 if (frame() && frame()->page()) | 1438 if (frame() && frame()->page()) |
1454 frame()->page()->eventHandlerRegistry().didRemoveEventHandler( | 1439 frame()->page()->eventHandlerRegistry().didRemoveEventHandler( |
1455 *this, eventType, registeredListener.options()); | 1440 *this, eventType, registeredListener.options()); |
1456 | 1441 |
1457 for (auto& it : m_eventListenerObservers) { | 1442 for (auto& it : m_eventListenerObservers) { |
1458 it->didRemoveEventListener(this, eventType); | 1443 it->didRemoveEventListener(this, eventType); |
1459 } | 1444 } |
1460 | 1445 |
1461 if (eventType == EventTypeNames::unload) { | 1446 if (eventType == EventTypeNames::unload) { |
1462 removeUnloadEventListener(this); | 1447 removeUnloadEventListener(this); |
1463 } else if (eventType == EventTypeNames::beforeunload && | 1448 } else if (eventType == EventTypeNames::beforeunload) { |
1464 allowsBeforeUnloadListeners(this)) { | |
1465 removeBeforeUnloadEventListener(this); | 1449 removeBeforeUnloadEventListener(this); |
dcheng
2017/03/29 23:03:46
This would ideally be commented too.
jam
2017/03/30 14:53:23
all 4 would need comment, to be consistent, or per
| |
1466 } | 1450 } |
1467 } | 1451 } |
1468 | 1452 |
1469 void LocalDOMWindow::warnUnusedPreloads(TimerBase* base) { | 1453 void LocalDOMWindow::warnUnusedPreloads(TimerBase* base) { |
1470 if (frame() && frame()->loader().documentLoader()) { | 1454 if (frame() && frame()->loader().documentLoader()) { |
1471 ResourceFetcher* fetcher = frame()->loader().documentLoader()->fetcher(); | 1455 ResourceFetcher* fetcher = frame()->loader().documentLoader()->fetcher(); |
1472 DCHECK(fetcher); | 1456 DCHECK(fetcher); |
1473 if (fetcher->countPreloads()) | 1457 if (fetcher->countPreloads()) |
1474 fetcher->warnUnusedPreloads(); | 1458 fetcher->warnUnusedPreloads(); |
1475 } | 1459 } |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1659 DOMWindow::trace(visitor); | 1643 DOMWindow::trace(visitor); |
1660 Supplementable<LocalDOMWindow>::trace(visitor); | 1644 Supplementable<LocalDOMWindow>::trace(visitor); |
1661 } | 1645 } |
1662 | 1646 |
1663 DEFINE_TRACE_WRAPPERS(LocalDOMWindow) { | 1647 DEFINE_TRACE_WRAPPERS(LocalDOMWindow) { |
1664 visitor->traceWrappers(m_customElements); | 1648 visitor->traceWrappers(m_customElements); |
1665 DOMWindow::traceWrappers(visitor); | 1649 DOMWindow::traceWrappers(visitor); |
1666 } | 1650 } |
1667 | 1651 |
1668 } // namespace blink | 1652 } // namespace blink |
OLD | NEW |