| 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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 207     return result; | 207     return result; | 
| 208 } | 208 } | 
| 209 | 209 | 
| 210 bool ScriptController::initializeMainWorld() | 210 bool ScriptController::initializeMainWorld() | 
| 211 { | 211 { | 
| 212     if (m_windowShell->isContextInitialized()) | 212     if (m_windowShell->isContextInitialized()) | 
| 213         return false; | 213         return false; | 
| 214     return windowShell(DOMWrapperWorld::mainWorld())->isContextInitialized(); | 214     return windowShell(DOMWrapperWorld::mainWorld())->isContextInitialized(); | 
| 215 } | 215 } | 
| 216 | 216 | 
| 217 V8WindowShell* ScriptController::existingWindowShell(DOMWrapperWorld* world) | 217 V8WindowShell* ScriptController::existingWindowShell(DOMWrapperWorld& world) | 
| 218 { | 218 { | 
| 219     ASSERT(world); | 219     if (world.isMainWorld()) | 
| 220 |  | 
| 221     if (world->isMainWorld()) |  | 
| 222         return m_windowShell->isContextInitialized() ? m_windowShell.get() : 0; | 220         return m_windowShell->isContextInitialized() ? m_windowShell.get() : 0; | 
| 223 | 221 | 
| 224     IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world->worldId()); | 222     IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()); | 
| 225     if (iter == m_isolatedWorlds.end()) | 223     if (iter == m_isolatedWorlds.end()) | 
| 226         return 0; | 224         return 0; | 
| 227     return iter->value->isContextInitialized() ? iter->value.get() : 0; | 225     return iter->value->isContextInitialized() ? iter->value.get() : 0; | 
| 228 } | 226 } | 
| 229 | 227 | 
| 230 V8WindowShell* ScriptController::windowShell(DOMWrapperWorld* world) | 228 V8WindowShell* ScriptController::windowShell(DOMWrapperWorld& world) | 
| 231 { | 229 { | 
| 232     ASSERT(world); |  | 
| 233 |  | 
| 234     V8WindowShell* shell = 0; | 230     V8WindowShell* shell = 0; | 
| 235     if (world->isMainWorld()) | 231     if (world.isMainWorld()) | 
| 236         shell = m_windowShell.get(); | 232         shell = m_windowShell.get(); | 
| 237     else { | 233     else { | 
| 238         IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world->worldId()
     ); | 234         IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId())
     ; | 
| 239         if (iter != m_isolatedWorlds.end()) | 235         if (iter != m_isolatedWorlds.end()) | 
| 240             shell = iter->value.get(); | 236             shell = iter->value.get(); | 
| 241         else { | 237         else { | 
| 242             OwnPtr<V8WindowShell> isolatedWorldShell = V8WindowShell::create(m_f
     rame, world, m_isolate); | 238             OwnPtr<V8WindowShell> isolatedWorldShell = V8WindowShell::create(m_f
     rame, world, m_isolate); | 
| 243             shell = isolatedWorldShell.get(); | 239             shell = isolatedWorldShell.get(); | 
| 244             m_isolatedWorlds.set(world->worldId(), isolatedWorldShell.release())
     ; | 240             m_isolatedWorlds.set(world.worldId(), isolatedWorldShell.release()); | 
| 245         } | 241         } | 
| 246     } | 242     } | 
| 247     if (!shell->isContextInitialized() && shell->initializeIfNeeded()) | 243     if (!shell->isContextInitialized() && shell->initializeIfNeeded()) | 
| 248         m_frame->loader().dispatchDidClearWindowObjectInWorld(world); | 244         m_frame->loader().dispatchDidClearWindowObjectInWorld(world); | 
| 249     return shell; | 245     return shell; | 
| 250 } | 246 } | 
| 251 | 247 | 
| 252 bool ScriptController::shouldBypassMainWorldContentSecurityPolicy() | 248 bool ScriptController::shouldBypassMainWorldContentSecurityPolicy() | 
| 253 { | 249 { | 
| 254     v8::Handle<v8::Context> context = m_isolate->GetCurrentContext(); | 250     v8::Handle<v8::Context> context = m_isolate->GetCurrentContext(); | 
| 255     if (context.IsEmpty() || !toDOMWindow(context)) | 251     if (context.IsEmpty() || !toDOMWindow(context)) | 
| 256         return false; | 252         return false; | 
| 257     DOMWrapperWorld* world = DOMWrapperWorld::current(m_isolate); | 253     DOMWrapperWorld& world = DOMWrapperWorld::current(m_isolate); | 
| 258     return world->isIsolatedWorld() ? world->isolatedWorldHasContentSecurityPoli
     cy() : false; | 254     return world.isIsolatedWorld() ? world.isolatedWorldHasContentSecurityPolicy
     () : false; | 
| 259 } | 255 } | 
| 260 | 256 | 
| 261 TextPosition ScriptController::eventHandlerPosition() const | 257 TextPosition ScriptController::eventHandlerPosition() const | 
| 262 { | 258 { | 
| 263     ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentPa
     rser(); | 259     ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentPa
     rser(); | 
| 264     if (parser) | 260     if (parser) | 
| 265         return parser->textPosition(); | 261         return parser->textPosition(); | 
| 266     return TextPosition::minimumPosition(); | 262     return TextPosition::minimumPosition(); | 
| 267 } | 263 } | 
| 268 | 264 | 
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 447 void ScriptController::setCaptureCallStackForUncaughtExceptions(bool value) | 443 void ScriptController::setCaptureCallStackForUncaughtExceptions(bool value) | 
| 448 { | 444 { | 
| 449     v8::V8::SetCaptureStackTraceForUncaughtExceptions(value, ScriptCallStack::ma
     xCallStackSizeToCapture, stackTraceOptions); | 445     v8::V8::SetCaptureStackTraceForUncaughtExceptions(value, ScriptCallStack::ma
     xCallStackSizeToCapture, stackTraceOptions); | 
| 450 } | 446 } | 
| 451 | 447 | 
| 452 void ScriptController::collectIsolatedContexts(Vector<std::pair<ScriptState*, Se
     curityOrigin*> >& result) | 448 void ScriptController::collectIsolatedContexts(Vector<std::pair<ScriptState*, Se
     curityOrigin*> >& result) | 
| 453 { | 449 { | 
| 454     v8::HandleScope handleScope(m_isolate); | 450     v8::HandleScope handleScope(m_isolate); | 
| 455     for (IsolatedWorldMap::iterator it = m_isolatedWorlds.begin(); it != m_isola
     tedWorlds.end(); ++it) { | 451     for (IsolatedWorldMap::iterator it = m_isolatedWorlds.begin(); it != m_isola
     tedWorlds.end(); ++it) { | 
| 456         V8WindowShell* isolatedWorldShell = it->value.get(); | 452         V8WindowShell* isolatedWorldShell = it->value.get(); | 
| 457         SecurityOrigin* origin = isolatedWorldShell->world()->isolatedWorldSecur
     ityOrigin(); | 453         SecurityOrigin* origin = isolatedWorldShell->world().isolatedWorldSecuri
     tyOrigin(); | 
| 458         if (!origin) | 454         if (!origin) | 
| 459             continue; | 455             continue; | 
| 460         v8::Local<v8::Context> v8Context = isolatedWorldShell->context(); | 456         v8::Local<v8::Context> v8Context = isolatedWorldShell->context(); | 
| 461         if (v8Context.IsEmpty()) | 457         if (v8Context.IsEmpty()) | 
| 462             continue; | 458             continue; | 
| 463         ScriptState* scriptState = ScriptState::forContext(v8Context); | 459         ScriptState* scriptState = ScriptState::forContext(v8Context); | 
| 464         result.append(std::pair<ScriptState*, SecurityOrigin*>(scriptState, orig
     in)); | 460         result.append(std::pair<ScriptState*, SecurityOrigin*>(scriptState, orig
     in)); | 
| 465     } | 461     } | 
| 466 } | 462 } | 
| 467 | 463 | 
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 613 | 609 | 
| 614 void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<Sc
     riptSourceCode>& sources, int extensionGroup, Vector<ScriptValue>* results) | 610 void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<Sc
     riptSourceCode>& sources, int extensionGroup, Vector<ScriptValue>* results) | 
| 615 { | 611 { | 
| 616     ASSERT(worldID > 0); | 612     ASSERT(worldID > 0); | 
| 617 | 613 | 
| 618     v8::HandleScope handleScope(m_isolate); | 614     v8::HandleScope handleScope(m_isolate); | 
| 619     v8::Local<v8::Array> v8Results; | 615     v8::Local<v8::Array> v8Results; | 
| 620     { | 616     { | 
| 621         v8::EscapableHandleScope evaluateHandleScope(m_isolate); | 617         v8::EscapableHandleScope evaluateHandleScope(m_isolate); | 
| 622         RefPtr<DOMWrapperWorld> world = DOMWrapperWorld::ensureIsolatedWorld(wor
     ldID, extensionGroup); | 618         RefPtr<DOMWrapperWorld> world = DOMWrapperWorld::ensureIsolatedWorld(wor
     ldID, extensionGroup); | 
| 623         V8WindowShell* isolatedWorldShell = windowShell(world.get()); | 619         V8WindowShell* isolatedWorldShell = windowShell(*world); | 
| 624 | 620 | 
| 625         if (!isolatedWorldShell->isContextInitialized()) | 621         if (!isolatedWorldShell->isContextInitialized()) | 
| 626             return; | 622             return; | 
| 627 | 623 | 
| 628         v8::Local<v8::Context> context = isolatedWorldShell->context(); | 624         v8::Local<v8::Context> context = isolatedWorldShell->context(); | 
| 629         v8::Context::Scope contextScope(context); | 625         v8::Context::Scope contextScope(context); | 
| 630         v8::Local<v8::Array> resultArray = v8::Array::New(m_isolate, sources.siz
     e()); | 626         v8::Local<v8::Array> resultArray = v8::Array::New(m_isolate, sources.siz
     e()); | 
| 631 | 627 | 
| 632         for (size_t i = 0; i < sources.size(); ++i) { | 628         for (size_t i = 0; i < sources.size(); ++i) { | 
| 633             v8::Local<v8::Value> evaluationResult = executeScriptAndReturnValue(
     context, sources[i]); | 629             v8::Local<v8::Value> evaluationResult = executeScriptAndReturnValue(
     context, sources[i]); | 
| 634             if (evaluationResult.IsEmpty()) | 630             if (evaluationResult.IsEmpty()) | 
| 635                 evaluationResult = v8::Local<v8::Value>::New(m_isolate, v8::Unde
     fined(m_isolate)); | 631                 evaluationResult = v8::Local<v8::Value>::New(m_isolate, v8::Unde
     fined(m_isolate)); | 
| 636             resultArray->Set(i, evaluationResult); | 632             resultArray->Set(i, evaluationResult); | 
| 637         } | 633         } | 
| 638 | 634 | 
| 639         v8Results = evaluateHandleScope.Escape(resultArray); | 635         v8Results = evaluateHandleScope.Escape(resultArray); | 
| 640     } | 636     } | 
| 641 | 637 | 
| 642     if (results && !v8Results.IsEmpty()) { | 638     if (results && !v8Results.IsEmpty()) { | 
| 643         for (size_t i = 0; i < v8Results->Length(); ++i) | 639         for (size_t i = 0; i < v8Results->Length(); ++i) | 
| 644             results->append(ScriptValue(v8Results->Get(i), m_isolate)); | 640             results->append(ScriptValue(v8Results->Get(i), m_isolate)); | 
| 645     } | 641     } | 
| 646 } | 642 } | 
| 647 | 643 | 
| 648 } // namespace WebCore | 644 } // namespace WebCore | 
| OLD | NEW | 
|---|