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