| 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 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 | 222 |
| 223 static DOMWindowSet& windowsWithBeforeUnloadEventListeners() | 223 static DOMWindowSet& windowsWithBeforeUnloadEventListeners() |
| 224 { | 224 { |
| 225 DEFINE_STATIC_LOCAL(DOMWindowSet, windowsWithBeforeUnloadEventListeners, ())
; | 225 DEFINE_STATIC_LOCAL(DOMWindowSet, windowsWithBeforeUnloadEventListeners, ())
; |
| 226 return windowsWithBeforeUnloadEventListeners; | 226 return windowsWithBeforeUnloadEventListeners; |
| 227 } | 227 } |
| 228 | 228 |
| 229 static void addUnloadEventListener(LocalDOMWindow* domWindow) | 229 static void addUnloadEventListener(LocalDOMWindow* domWindow) |
| 230 { | 230 { |
| 231 DOMWindowSet& set = windowsWithUnloadEventListeners(); | 231 DOMWindowSet& set = windowsWithUnloadEventListeners(); |
| 232 if (set.isEmpty()) | 232 if (set.isEmpty()) { |
| 233 disableSuddenTermination(); | 233 disableSuddenTermination(); |
| 234 if (domWindow->frame()) { |
| 235 domWindow->frame()->loader().client()->suddenTerminationDisablerChan
ged( |
| 236 true, FrameLoaderClient::UnloadHandler); |
| 237 } |
| 238 } |
| 234 set.add(domWindow); | 239 set.add(domWindow); |
| 235 if (domWindow->frame()) { | |
| 236 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( | |
| 237 1, FrameLoaderClient::UnloadHandler); | |
| 238 } | |
| 239 } | 240 } |
| 240 | 241 |
| 241 static void removeUnloadEventListener(LocalDOMWindow* domWindow) | 242 static void removeUnloadEventListener(LocalDOMWindow* domWindow) |
| 242 { | 243 { |
| 243 DOMWindowSet& set = windowsWithUnloadEventListeners(); | 244 DOMWindowSet& set = windowsWithUnloadEventListeners(); |
| 244 DOMWindowSet::iterator it = set.find(domWindow); | 245 DOMWindowSet::iterator it = set.find(domWindow); |
| 245 if (it == set.end()) | 246 if (it == set.end()) |
| 246 return; | 247 return; |
| 247 set.remove(it); | 248 set.remove(it); |
| 248 if (set.isEmpty()) | 249 if (set.isEmpty()) { |
| 249 enableSuddenTermination(); | 250 enableSuddenTermination(); |
| 250 if (domWindow->frame()) { | 251 if (domWindow->frame()) { |
| 251 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( | 252 domWindow->frame()->loader().client()->suddenTerminationDisablerChan
ged( |
| 252 -1, FrameLoaderClient::UnloadHandler); | 253 false, FrameLoaderClient::UnloadHandler); |
| 254 } |
| 253 } | 255 } |
| 254 } | 256 } |
| 255 | 257 |
| 256 static void removeAllUnloadEventListeners(LocalDOMWindow* domWindow) | 258 static void removeAllUnloadEventListeners(LocalDOMWindow* domWindow) |
| 257 { | 259 { |
| 258 DOMWindowSet& set = windowsWithUnloadEventListeners(); | 260 DOMWindowSet& set = windowsWithUnloadEventListeners(); |
| 259 DOMWindowSet::iterator it = set.find(domWindow); | 261 DOMWindowSet::iterator it = set.find(domWindow); |
| 260 if (it == set.end()) | 262 if (it == set.end()) |
| 261 return; | 263 return; |
| 262 int numHandlers = set.count(domWindow); | |
| 263 set.removeAll(it); | 264 set.removeAll(it); |
| 264 if (set.isEmpty()) | 265 if (set.isEmpty()) { |
| 265 enableSuddenTermination(); | 266 enableSuddenTermination(); |
| 266 if (domWindow->frame()) { | 267 if (domWindow->frame()) { |
| 267 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( | 268 domWindow->frame()->loader().client()->suddenTerminationDisablerChan
ged( |
| 268 -numHandlers, FrameLoaderClient::UnloadHandler); | 269 false, FrameLoaderClient::UnloadHandler); |
| 270 } |
| 269 } | 271 } |
| 270 } | 272 } |
| 271 | 273 |
| 272 static void addBeforeUnloadEventListener(LocalDOMWindow* domWindow) | 274 static void addBeforeUnloadEventListener(LocalDOMWindow* domWindow) |
| 273 { | 275 { |
| 274 DOMWindowSet& set = windowsWithBeforeUnloadEventListeners(); | 276 DOMWindowSet& set = windowsWithBeforeUnloadEventListeners(); |
| 275 if (set.isEmpty()) | 277 if (set.isEmpty()) { |
| 276 disableSuddenTermination(); | 278 disableSuddenTermination(); |
| 279 if (domWindow->frame()) { |
| 280 domWindow->frame()->loader().client()->suddenTerminationDisablerChan
ged( |
| 281 true, FrameLoaderClient::BeforeUnloadHandler); |
| 282 } |
| 283 } |
| 277 set.add(domWindow); | 284 set.add(domWindow); |
| 278 if (domWindow->frame()) { | |
| 279 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( | |
| 280 1, FrameLoaderClient::BeforeUnloadHandler); | |
| 281 } | |
| 282 } | 285 } |
| 283 | 286 |
| 284 static void removeBeforeUnloadEventListener(LocalDOMWindow* domWindow) | 287 static void removeBeforeUnloadEventListener(LocalDOMWindow* domWindow) |
| 285 { | 288 { |
| 286 DOMWindowSet& set = windowsWithBeforeUnloadEventListeners(); | 289 DOMWindowSet& set = windowsWithBeforeUnloadEventListeners(); |
| 287 DOMWindowSet::iterator it = set.find(domWindow); | 290 DOMWindowSet::iterator it = set.find(domWindow); |
| 288 if (it == set.end()) | 291 if (it == set.end()) |
| 289 return; | 292 return; |
| 290 set.remove(it); | 293 set.remove(it); |
| 291 if (set.isEmpty()) | 294 if (set.isEmpty()) { |
| 292 enableSuddenTermination(); | 295 enableSuddenTermination(); |
| 293 if (domWindow->frame()) { | 296 if (domWindow->frame()) { |
| 294 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( | 297 domWindow->frame()->loader().client()->suddenTerminationDisablerChan
ged( |
| 295 -1, FrameLoaderClient::BeforeUnloadHandler); | 298 false, FrameLoaderClient::BeforeUnloadHandler); |
| 299 } |
| 296 } | 300 } |
| 297 } | 301 } |
| 298 | 302 |
| 299 static void removeAllBeforeUnloadEventListeners(LocalDOMWindow* domWindow) | 303 static void removeAllBeforeUnloadEventListeners(LocalDOMWindow* domWindow) |
| 300 { | 304 { |
| 301 DOMWindowSet& set = windowsWithBeforeUnloadEventListeners(); | 305 DOMWindowSet& set = windowsWithBeforeUnloadEventListeners(); |
| 302 DOMWindowSet::iterator it = set.find(domWindow); | 306 DOMWindowSet::iterator it = set.find(domWindow); |
| 303 if (it == set.end()) | 307 if (it == set.end()) |
| 304 return; | 308 return; |
| 305 int numHandlers = set.count(domWindow); | |
| 306 set.removeAll(it); | 309 set.removeAll(it); |
| 307 if (set.isEmpty()) | 310 if (set.isEmpty()) { |
| 308 enableSuddenTermination(); | 311 enableSuddenTermination(); |
| 309 if (domWindow->frame()) { | 312 if (domWindow->frame()) { |
| 310 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( | 313 domWindow->frame()->loader().client()->suddenTerminationDisablerChan
ged( |
| 311 -numHandlers, FrameLoaderClient::BeforeUnloadHandler); | 314 false, FrameLoaderClient::BeforeUnloadHandler); |
| 315 } |
| 312 } | 316 } |
| 313 } | 317 } |
| 314 | 318 |
| 315 static bool allowsBeforeUnloadListeners(LocalDOMWindow* window) | 319 static bool allowsBeforeUnloadListeners(LocalDOMWindow* window) |
| 316 { | 320 { |
| 317 ASSERT_ARG(window, window); | 321 ASSERT_ARG(window, window); |
| 318 LocalFrame* frame = window->frame(); | 322 LocalFrame* frame = window->frame(); |
| 319 if (!frame) | 323 if (!frame) |
| 320 return false; | 324 return false; |
| 321 return frame->isMainFrame(); | 325 return frame->isMainFrame(); |
| (...skipping 1531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1853 return m_frameObserver->frame(); | 1857 return m_frameObserver->frame(); |
| 1854 } | 1858 } |
| 1855 | 1859 |
| 1856 v8::Handle<v8::Object> LocalDOMWindow::wrap(v8::Handle<v8::Object> creationConte
xt, v8::Isolate* isolate) | 1860 v8::Handle<v8::Object> LocalDOMWindow::wrap(v8::Handle<v8::Object> creationConte
xt, v8::Isolate* isolate) |
| 1857 { | 1861 { |
| 1858 ASSERT_NOT_REACHED(); // LocalDOMWindow has [Custom=ToV8]. | 1862 ASSERT_NOT_REACHED(); // LocalDOMWindow has [Custom=ToV8]. |
| 1859 return v8::Handle<v8::Object>(); | 1863 return v8::Handle<v8::Object>(); |
| 1860 } | 1864 } |
| 1861 | 1865 |
| 1862 } // namespace blink | 1866 } // namespace blink |
| OLD | NEW |