| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2009 Apple Inc. All rights reserved. |
| 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 are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 _NPN_UnregisterObject(it->value); | 109 _NPN_UnregisterObject(it->value); |
| 110 _NPN_ReleaseObject(it->value); | 110 _NPN_ReleaseObject(it->value); |
| 111 } | 111 } |
| 112 m_pluginObjects.clear(); | 112 m_pluginObjects.clear(); |
| 113 | 113 |
| 114 if (m_windowScriptNPObject) { | 114 if (m_windowScriptNPObject) { |
| 115 // Dispose of the underlying V8 object before releasing our reference | 115 // Dispose of the underlying V8 object before releasing our reference |
| 116 // to it, so that if a plugin fails to release it properly we will | 116 // to it, so that if a plugin fails to release it properly we will |
| 117 // only leak the NPObject wrapper, not the object, its document, or | 117 // only leak the NPObject wrapper, not the object, its document, or |
| 118 // anything else they reference. | 118 // anything else they reference. |
| 119 disposeUnderlyingV8Object(m_windowScriptNPObject); | 119 disposeUnderlyingV8Object(m_windowScriptNPObject, m_isolate); |
| 120 _NPN_ReleaseObject(m_windowScriptNPObject); | 120 _NPN_ReleaseObject(m_windowScriptNPObject); |
| 121 m_windowScriptNPObject = 0; | 121 m_windowScriptNPObject = 0; |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 | 124 |
| 125 void ScriptController::clearForOutOfMemory() | 125 void ScriptController::clearForOutOfMemory() |
| 126 { | 126 { |
| 127 clearForClose(true); | 127 clearForClose(true); |
| 128 } | 128 } |
| 129 | 129 |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 v8::HandleScope handleScope(isolate); | 460 v8::HandleScope handleScope(isolate); |
| 461 v8::Handle<v8::Context> v8Context = ScriptController::mainWorldContext(frame
); | 461 v8::Handle<v8::Context> v8Context = ScriptController::mainWorldContext(frame
); |
| 462 if (v8Context.IsEmpty()) | 462 if (v8Context.IsEmpty()) |
| 463 return createNoScriptObject(); | 463 return createNoScriptObject(); |
| 464 | 464 |
| 465 v8::Context::Scope scope(v8Context); | 465 v8::Context::Scope scope(v8Context); |
| 466 DOMWindow* window = frame->domWindow(); | 466 DOMWindow* window = frame->domWindow(); |
| 467 v8::Handle<v8::Value> global = toV8(window, v8::Handle<v8::Object>(), v8Cont
ext->GetIsolate()); | 467 v8::Handle<v8::Value> global = toV8(window, v8::Handle<v8::Object>(), v8Cont
ext->GetIsolate()); |
| 468 ASSERT(global->IsObject()); | 468 ASSERT(global->IsObject()); |
| 469 | 469 |
| 470 return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(global), windo
w); | 470 return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(global), windo
w, isolate); |
| 471 } | 471 } |
| 472 | 472 |
| 473 NPObject* ScriptController::windowScriptNPObject() | 473 NPObject* ScriptController::windowScriptNPObject() |
| 474 { | 474 { |
| 475 if (m_windowScriptNPObject) | 475 if (m_windowScriptNPObject) |
| 476 return m_windowScriptNPObject; | 476 return m_windowScriptNPObject; |
| 477 | 477 |
| 478 if (canExecuteScripts(NotAboutToExecuteScript)) { | 478 if (canExecuteScripts(NotAboutToExecuteScript)) { |
| 479 // JavaScript is enabled, so there is a JavaScript window object. | 479 // JavaScript is enabled, so there is a JavaScript window object. |
| 480 // Return an NPObject bound to the window object. | 480 // Return an NPObject bound to the window object. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 499 v8::Handle<v8::Context> v8Context = ScriptController::mainWorldContext(m_fra
me); | 499 v8::Handle<v8::Context> v8Context = ScriptController::mainWorldContext(m_fra
me); |
| 500 if (v8Context.IsEmpty()) | 500 if (v8Context.IsEmpty()) |
| 501 return createNoScriptObject(); | 501 return createNoScriptObject(); |
| 502 v8::Context::Scope scope(v8Context); | 502 v8::Context::Scope scope(v8Context); |
| 503 | 503 |
| 504 DOMWindow* window = m_frame->domWindow(); | 504 DOMWindow* window = m_frame->domWindow(); |
| 505 v8::Handle<v8::Value> v8plugin = toV8(plugin, v8::Handle<v8::Object>(), v8Co
ntext->GetIsolate()); | 505 v8::Handle<v8::Value> v8plugin = toV8(plugin, v8::Handle<v8::Object>(), v8Co
ntext->GetIsolate()); |
| 506 if (!v8plugin->IsObject()) | 506 if (!v8plugin->IsObject()) |
| 507 return createNoScriptObject(); | 507 return createNoScriptObject(); |
| 508 | 508 |
| 509 return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(v8plugin), win
dow); | 509 return npCreateV8ScriptObject(0, v8::Handle<v8::Object>::Cast(v8plugin), win
dow, v8Context->GetIsolate()); |
| 510 } | 510 } |
| 511 | 511 |
| 512 void ScriptController::clearWindowShell() | 512 void ScriptController::clearWindowShell() |
| 513 { | 513 { |
| 514 double start = currentTime(); | 514 double start = currentTime(); |
| 515 // V8 binding expects ScriptController::clearWindowShell only be called | 515 // V8 binding expects ScriptController::clearWindowShell only be called |
| 516 // when a frame is loading a new page. This creates a new context for the ne
w page. | 516 // when a frame is loading a new page. This creates a new context for the ne
w page. |
| 517 m_windowShell->clearForNavigation(); | 517 m_windowShell->clearForNavigation(); |
| 518 for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin(); iter != m_i
solatedWorlds.end(); ++iter) | 518 for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin(); iter != m_i
solatedWorlds.end(); ++iter) |
| 519 iter->value->clearForNavigation(); | 519 iter->value->clearForNavigation(); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 v8Results = evaluateHandleScope.Close(resultArray); | 714 v8Results = evaluateHandleScope.Close(resultArray); |
| 715 } | 715 } |
| 716 | 716 |
| 717 if (results && !v8Results.IsEmpty()) { | 717 if (results && !v8Results.IsEmpty()) { |
| 718 for (size_t i = 0; i < v8Results->Length(); ++i) | 718 for (size_t i = 0; i < v8Results->Length(); ++i) |
| 719 results->append(ScriptValue(v8Results->Get(i))); | 719 results->append(ScriptValue(v8Results->Get(i))); |
| 720 } | 720 } |
| 721 } | 721 } |
| 722 | 722 |
| 723 } // namespace WebCore | 723 } // namespace WebCore |
| OLD | NEW |